我正在开发一个C#/ WPF程序,并创建了一个由两个文本框(和一个网格)组成的用户控件。
我的主窗口中有一个列表框。它的items源设置为我提到的用户控件的集合。当我填写并调试程序时,它包含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 :(得分:0)
为什么将CustomLine
控件包装在UserControl
标记中?
我最好的猜测是UserControl
告诉ListBox
项目的大小不正确,因此ListBox
只会加载它认为可见的项目。这是因为ListBox
的默认行为是使用UI虚拟化,因此它只呈现可见的控件,滚动ListBox将重用现有控件并替换它们后面的DataContext而不是创建新控件
尝试删除UserControl
ItemTemplate
<ListBox.ItemTemplate>
<DataTemplate>
<local:CustomLine />
</DataTemplate>
</ListBox.ItemTemplate>