Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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
C# WPF Listview和GridView用于格式化。格式在滚动时消失_C#_Wpf - Fatal编程技术网

C# WPF Listview和GridView用于格式化。格式在滚动时消失

C# WPF Listview和GridView用于格式化。格式在滚动时消失,c#,wpf,C#,Wpf,我在列表视图中循环浏览每个项目,并在网格视图中格式化文本框。初始格式有效,但如果我上下滚动列表视图几次,格式就会消失 这是处理“我的项目”的基本循环: for (int i = 0; i < lvDocumentation.Items.Count; i++) { // Grabs the item ListBoxItem selectedListBoxItem = lvDocumentation.ItemContainerGenerator.ContainerFromIt

我在列表视图中循环浏览每个项目,并在网格视图中格式化文本框。初始格式有效,但如果我上下滚动列表视图几次,格式就会消失

这是处理“我的项目”的基本循环:

for (int i = 0; i < lvDocumentation.Items.Count; i++)
{
    // Grabs the item 
    ListBoxItem selectedListBoxItem = lvDocumentation.ItemContainerGenerator.ContainerFromItem(lvDocumentation.Items[i]) as ListBoxItem;

   PersonDTO thisPersonDTO = (PersonDTO)lvDocumentation.Items[i];        

   // I do some odds and ends here and call formatting routines for the buttons... 

}
如果该项最初返回null,因为它不在显示区域中,那么它将获取listbox项而不是null

似乎正在刷新格式,但不知道为什么/在哪里

如果我上下滚动一点,颜色就会恢复到原来的格式,我不知道为什么

这是因为中描述的默认UI虚拟化和容器回收

您可以通过将附加的
isvirtualization
属性设置为
false
来禁用虚拟化:

VirtualizingPanel.SetIsVirtualizing(lvDocumentation, false);
这是以牺牲滚动性能为代价的,但考虑到您当前直接操作UI容器的方法,这是您唯一的选择


你应该调查一下。这是开发基于XAML的UI应用程序时推荐使用的设计模式。

ListView使用UI虚拟化,这意味着它只呈现当前视图上可见的内容,而代码隐藏方法只能找到这些内容。我的建议是,不要通过调用该代码一次(或每次滚动多次)来应用,而是设置ListView的ItemTemplate并将其绑定到您的属性。
lvDocumentation.UpdateLayout();
lvDocumentation.ScrollIntoView(lvDocumentation.Items[index]);
selectedListBoxItem = lvDocumentation.ItemContainerGenerator.ContainerFromItem(lvDocumentation.Items[index]) as ListBoxItem;
VirtualizingPanel.SetIsVirtualizing(lvDocumentation, false);