Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 虚拟化StackPanel不';t清除ItemTemplate中文本框的文本_Wpf_Silverlight_Virtualizingstackpanel - Fatal编程技术网

Wpf 虚拟化StackPanel不';t清除ItemTemplate中文本框的文本

Wpf 虚拟化StackPanel不';t清除ItemTemplate中文本框的文本,wpf,silverlight,virtualizingstackpanel,Wpf,Silverlight,Virtualizingstackpanel,我有ItemsControl和virtualzingstackpanel作为项目面板,如下所示: <ItemsControl Style="{StaticResource ItemsControl}" Name="itemsControl" Margin="0,100,0,0" HorizontalAlignment="Stretch" Height="80"> <ItemsControl.ItemTemplate>

我有ItemsControlvirtualzingstackpanel作为项目面板,如下所示:

<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>

我将一个包含100000个元素的集合设置为ItemsSource,并获得了非常好的性能。除了一件事,一切都很好。当我在其中一个文本框中输入文本,然后开始滚动时,我看到该文本在整个列表中随处可见


我了解虚拟化StackPanel的功能。它不断加载元素,当我们滚动时,这些元素变得可见。我了解它的虚拟化技术的某些方面,但我不知道如何理解这种奇怪的行为。我在WPF/Silverlight虚拟化上找不到好的文档,因此,请解释一下发生了什么事

virtualzingstackpanel
实际上并没有连续加载元素。相反,它重新使用现有的元素(控件),并简单地替换它们后面的DataContext

因此,如果您有一个包含100000个项目的
虚拟化StackPanel
,并且一次只能看到10个项目,那么它通常会渲染大约14个项目(滚动缓冲区的额外项目)。当您滚动时,这14个控件背后的DataContext会发生更改,但实际控件本身永远不会被替换


如果您在TextBox#1中输入文本之类的操作,并且
TextBox.Text
未绑定到任何内容,则文本将始终显示,因为控件正在被重复使用。如果将
TextBox.Text
绑定到一个值,则当您滚动时,DataContext将更改,这将替换显示的文本。

不确定如何在VirtualzingStackPanel中直接关闭回收,但这是列表框中的语法。我本想发表评论,但我想要格式化的代码

   <ListBox VirtualizingStackPanel.VirtualizationMode="Standard" />


datagird中的单选按钮也有同样的问题,通过为每个单元格添加单独的编辑模板解决了这个问题。多亏了@Rachel,现在我们清楚地知道了如何解决这类问题。您仍然可以通过在代码块周围添加
反勾来在注释中添加代码行,尽管它不会给代码块上色或让您执行多行操作。这是标准美国键盘上[Tab]键上方的键。它与Tilde(
~
)共享一个密钥。