2012-01-27 36 views
0

我正在處理C#/ WPF程序並創建了由兩個文本框(和一個網格)組成的用戶控件。列表框無法顯示其所有項目的內容

在我的主窗口中有一個列表框。它的項目源設置爲我提到的用戶控件的集合。當我填充它並調試程序時,它可以保存20個項目,並且所有項目都有我想要的文本。但在加載主窗口(並且列表框已填充)後,它會顯示所有項目,但其中只有九個文本框帶有文本。其他人的文本框沒有任何文字。

這可能是什麼原因?

更新:這裏是代碼。

用戶控制:

<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將最有可能成爲你的一些代碼。如果你分享它,答案_might_會變得更具體。 – Nuffin 2012-01-27 11:45:57

+0

我也想過這個。但我不確定我應該在這裏粘貼哪些代碼。我已更新原始帖子。 – Sentropie 2012-01-27 12:10:42

回答

0

爲什麼你將CustomLine控件包裝在UserControl標籤中?

我最好的猜測是UserControl告訴ListBox項目是不正確的大小,所以ListBox只加載它認爲是可見的項目。這是因爲ListBox的默認行爲是使用UI虛擬化,因此它只呈現可見的控件,而滾動ListBox將重新使用現有控件並替換它們後面的DataContext,而不是創建新控件。

嘗試在ItemTemplate

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

謝謝,那就是重點!我使用了'UserControl'標籤,因爲我以這種方式學習了 - 顯然是錯誤的。謝謝你的解釋。 – Sentropie 2012-01-27 15:25:54