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