2012-01-27 12 views
0

私はC#/ WPFプログラムで作業しており、2つのテキストボックス(およびグリッド)で構成されるユーザーコントロールを作成しました。Listboxはアイテムのすべてのコンテンツを表示できません

メインウィンドウにリストボックスがあります。そのアイテムのソースは、私のリムーバブルユーザコントロールのコレクションに設定されています。私はそれを埋めると、それは私がそれを望むように20項目を保持し、すべての項目がそれにテキストを持ってプログラムをデバッグします。しかし、メインウィンドウがロードされた後(そしてリストボックスがいっぱいになった)、すべてのアイテムが表示されますが、そのうち9つだけがテキスト付きのテキストボックスを持っています。他のテキストボックスには、テキストのないテキストボックスがあります。

これにはどのような理由が考えられますか?

更新:ここにコードがあります。

ユーザーコントロール:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="40" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <TextBox x:Name="NumberColumn" x:FieldModifier="public" Text="{Binding LineNumber}" 
      Grid.Column="0" HorizontalAlignment="Right" /> 
    <TextBox x:Name="TextColumn" x:FieldModifier="public" Text="{Binding Text}" 
      Grid.Column="1" HorizontalAlignment="Left" />    
</Grid> 

リストボックスの充填:

string line; 
Collection<CustomLine> lines = new Collection<CustomLine>(); 
StreamReader reader = new StreamReader(@"2008.sln"); 
while ((line = reader.ReadLine()) != null) 
{ 
    CustomLine myLine = new CustomLine(line, lines.Count + 1); 
    lines.Add(myLine); 
} 

this.leftListBox.ItemsSource = lines; 

リストボックスのXAML:

<ListBox x:Name="leftListBox" Grid.Column="0" Margin="10" 
      MouseDown="leftListBox_MouseDown" SelectionChanged="leftListBox_SelectionChanged"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <UserControl> 
        <local:CustomLine /> 
       </UserControl> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

コードの別の部分が使用される可能性がある場合私は後でそれを追加することもできます。

+0

UserControlを削除してください。それを分かち合うと、答えはより具体的になります。 – Nuffin

+0

私もそれについて考えました。しかし、私はここに貼り付けるコードの部分が不明でした。元の投稿を更新しました。 – Sentropie

答えて

0

CustomLineコントロールをUserControlタグにラップしたのはなぜですか?

UserControlは、ListBoxにアイテムのサイズが間違っていると言っているため、ListBoxには表示されていると思われるアイテムのみが読み込まれています。これは、ListBoxの既定の動作ではUI仮想化を使用するため、表示されているコントロールのみがレンダリングされ、ListBoxをスクロールすると既存のコントロールが再利用され、新しいコントロールを作成する代わりにその背後にあるDataContextが置き換えられます。

は理由が最も可能性の高いあなたのコードの一部になりますあなたのItemTemplate

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <local:CustomLine /> 
    </DataTemplate> 
</ListBox.ItemTemplate> 
+0

ありがとう、それがポイントでした!私は 'UserControl'タグを使っていました。説明もありがとう。 – Sentropie

関連する問題