我的ItemsControl与VirtualizingStackPanel作为项目小组是这样的:VirtualizingStackPanel不清除文本框的文本在ItemTemplate
<ItemsControl Style="{StaticResource ItemsControl}" Name="itemsControl"
Margin="0,100,0,0" HorizontalAlignment="Stretch" Height="80">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
风格是以下几点:
<Style x:Key="ItemsControl" TargetType="ItemsControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ItemsControl">
<ScrollViewer VerticalScrollBarVisibility="Hidden"
HorizontalScrollBarVisibility="Visible">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我设置作为ItemsSource 100.000元素的集合,并获得非常好的表现。除了一件事以外,一切都很好。当我在其中一个文本框中输入文本,然后开始滚动时,我看到该文本出现在整个列表中的任何地方!
我明白VirtualizingStackPanel是做什么的。它不断加载在滚动时可见的元素。我理解它的虚拟化技术的一些方面,但我不知道如何理解这种奇怪的行为。我没有找到关于WPF/Silverlight虚拟化的好文档,所以,请解释我发生了什么
我对datagird中的单选按钮有同样的问题,并通过为每个单元添加单独的编辑模板来解决它。感谢@Rachel,现在很清楚如何解决这类问题 –