海。
我有一个带有滚动查看器的 ListBox。列表框的每一项(40++ 项)都包含一个文本块和一个小图像。当我调整窗口大小时,调整大小非常滞后。如果我将项目的文本块可见性设置为“折叠”,则调整大小是可以的。我的第一种方法是将滚动查看器中未显示的每个项目的可见性设置为“折叠”,但是当用户可见项目时我找不到指示符。
有没有人有想法让调整大小的过程不那么滞后,也许是其他一些控件而不是文本块?谢谢你的帮助。
以下指定给定偏移量处的项目是否可见:
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;
}
提高调整大小性能的最佳方法是在 ScrollContentPresenter中使用VirtualizingStackPanel 。您可以在例如您的 ListBox 或通常的 ItemsPanel 的数据模板中覆盖它。
与普通的 StackPanel 相比,它不会呈现不可见的项目,后者始终呈现所有项目,无论它们是否对用户可见。
对我来说效果很好。