[英]WPF/C# Textwrapping in a scrollviewer makes window resizing laggy
HY。
我有一个带有滚动查看器的ListBox。 列表框的每一项(40 ++项)都包含一个文本块和一个小图像。 当我调整窗口大小时,调整大小非常缓慢。 如果我将文本块的可见性设置为“折叠”,则可以调整大小。 我的第一种方法是将未在scrollviewer中显示的每个项目的可见性设置为“折叠”,但是当某个项目对用户可见时,我找不到指示器。
有没有人有一个想法,使调整大小的过程不那么拖延,也许是其他控件而不是文本块? 谢谢你的帮助。
改善调整大小性能的最佳方法是在ScrollContentPresenter中使用VirtualizingStackPanel 。 您可以在例如ListBox或通常为ItemsPanel的数据模板中覆盖它。
与普通的StackPanel始终渲染所有项目的用户相比,它不会渲染不可见的项目,无论它们是否对用户可见。
对我来说效果很好。
以下内容指定在给定偏移处的项目是否可见:
public bool IsItemVisible(ListBox listBox, int index)
{
if (listBox.Items.Count != 0)
{
VirtualizingStackPanel vsp = (VirtualizingStackPanel)VisualTreeHelper.GetParent(listBox.ItemContainerGenerator.ContainerFromIndex(0));
int FirstVisibleItem = (int)vsp.VerticalOffset, VisibleItemCount = (int)vsp.ViewportHeight;
return index >= FirstVisibleItem && index <= FirstVisibleItem + VisibleItemCount;
}
return false;
}
您可以像这样使用它:
private void Button_Click(object sender, RoutedEventArgs e)
{
for (int i = listbox1.Items.Count - 1; i >= 0; i--)
if (!IsItemVisible(listbox1, i))
((ListBoxItem)listbox1.Items[i]).Visibility = Visibility.Collapsed;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.