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