質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

8209閲覧

WPFでListBoxにユーザーコントロールをBindすると最後までスクロール出来ない

Fushihara

総合スコア52

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/08/07 06:42

編集2016/08/08 23:50

データに応じて高さが変わるユーザーコントロールを作りListBoxにBindしたのですが、ListBoxを一番下までスクロールしてもアイテムが一部分しか表示されません。
こちらの環境はwin10Pro + VisualStudio2015 Community です。
ソリューションをまとめたzipファイルはこちらになります
https://fushihara.org/JTHiac3k.zip

この図ですと最後のアイテムはid:20なのですが、画像が途中までしか表示されません。
イメージ説明
キーボードの下キーを押してもこれ以上移動してくれませんし、マウスホイールで下に移動しようとすると一瞬上にスクロールしたりとListBoxの挙動が不安定です。
予めユーザーコントロールの高さを決め打ちしていれば問題ないのですが、Bindされたデータによって高さが変わるのでそれが出来ない状態です。
ListBoxのスクロールバーを見ると、id:20が途中までしか表示されていないのに一番下までスクロールされている状態なのも気になります。

どのようにすれば、高さが不定のユーザーコントロールで最後のアイテムまでスクロールする事が出来ますでしょうか。
よろしくお願いします。

VisualStudioのソリューションは以下の通りです

イメージ説明

各ファイルの中身は以下の通りです

xml

1// MainWindow.xaml 2<Window x:Class="DynamicHeightList.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 7 xmlns:local="clr-namespace:DynamicHeightList" 8 mc:Ignorable="d" 9 Title="MainWindow" Height="350" Width="525"> 10 <Grid> 11 <ListBox x:Name="MainList" ItemsSource="{Binding}"> 12 <ListBox.ItemTemplate> 13 <DataTemplate> 14 <local:MainWpfListItemView/> 15 </DataTemplate> 16 </ListBox.ItemTemplate> 17 </ListBox> 18 19 </Grid> 20</Window>

c

1// MainWindow.xaml.cs 2using System.Collections.Generic; 3using System.Windows; 4 5namespace DynamicHeightList { 6 /// <summary> 7 /// MainWindow.xaml の相互作用ロジック 8 /// </summary> 9 public partial class MainWindow : Window { 10 public MainWindow() { 11 InitializeComponent(); 12 List<int> context = new List<int>(); 13 for(int i = 10; i <= 20; i++) { 14 context.Add(i); 15 } 16 this.DataContext = context; 17 } 18 } 19} 20

xml

1// MainWpfListItemView.xaml 2<UserControl x:Class="DynamicHeightList.MainWpfListItemView" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 7 xmlns:local="clr-namespace:DynamicHeightList" 8 mc:Ignorable="d" 9 DataContextChanged="UserControl_DataContextChanged" 10 d:DesignHeight="300" d:DesignWidth="300"> 11 <Grid> 12 <Grid.RowDefinitions> 13 <RowDefinition Height="20"/> 14 <RowDefinition Height="*"/> 15 </Grid.RowDefinitions> 16 <TextBlock x:Name="MainText"></TextBlock> 17 <StackPanel Orientation="Horizontal" x:Name="MainStack" Grid.Row="1"> 18 </StackPanel> 19 </Grid> 20</UserControl>

cs

1// MainWpfListItemView.xaml.cs 2using System; 3using System.Windows; 4using System.Windows.Controls; 5using System.Windows.Media.Imaging; 6 7namespace DynamicHeightList { 8 /// <summary> 9 /// MainWpfListItemView.xaml の相互作用ロジック 10 /// </summary> 11 public partial class MainWpfListItemView : UserControl { 12 public MainWpfListItemView() { 13 InitializeComponent(); 14 } 15 16 private void UserControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { 17 int id = (int)this.DataContext; 18 this.MainText.Text = $"id:{id}"; 19 var image = new Image(); 20 image.Source = new BitmapImage(new Uri($"http://dummyimage.com/100x100/000/fff&text={id}")); 21 this.MainStack.Children.Add(image); 22 } 23 } 24}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

flied_onion

2016/08/07 13:07

私の環境(Windows10+VS2015)では再現しませんでした(画像がそもそもウィンドウに収まらないときぐらいしか発生しなかった)。 VSは2015と思いますが、Win8.1ですか? あと UserControlの高さを this.Height = MainText.Height + image.Height; と指定した場合はどうなるんでしょう。
Fushihara

2016/08/08 23:48

Win10+VS2015(Community)ですが、発生します。念のためソリューションを新しく作っても同じでした。 this.Height = MainText.Height + image.Height; をやってみたけど変わりありませんでした。 本文に、ソリューションファイルをzipしたファイルへのリンクを貼ってみます。 一応exeも入っていますが… https://fushihara.org/JTHiac3k.zip
guest

回答1

0

ベストアンサー

listboxに以下のオプションを追加してみてください。

xml

1<Listbox VirtualizingPanel.IsVirtualizing="False" VirtualizingPanel.ScrollUnit="Pixel"> 2</Listbox>

投稿2016/08/09 00:28

nya

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Fushihara

2016/08/09 01:13

仮想化を切らないとダメか・・・ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問