2009-04-29 13 views
2

Hy。WPF/C#在scrollviewer中进行文本翻卷会使窗口调整大小laggy

我已经有了一个带滚动查看器的ListBox。列表框的每个项目(40 ++项目)都包含一个文本块和一个小图像。 当我调整窗口大小时,调整大小非常缓慢。如果我将项目的文本块可见性设置为“折叠”,则调整大小是可以的。我的第一种方法是将没有在滚动查看器中显示的每个项目的可见性设置为“折叠”,但是当项目对用户可见时,我找不到指示符。

有没有人有一个想法,使调整大小的过程较不滞后,也许一些其他的控制,而不是文本块? 谢谢你的帮助。

+0

发布您的XAML或简体中文版。 – 2009-04-29 12:23:14

回答

0

最好的方式来提高调整大小的性能,在您的ScrollContentPresenter中使用VirtualizingStackPanel。你可以在例如你的ListBox的数据模板中,或者一般情况下,在你的ItemsPanel中覆盖它。

与通常的StackPanel相比,它不会显示不可见的项目,该项目始终呈现所有项目,无论它们是否对用户可见。

对我来说工作得很好。

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; 
} 
+0

我不知道这是否适合我,因为我需要在每个滚动活动和每个大小改变的事件(每次鼠标移动事件,而且很常见)上进行检查。 我认为这会降低性能,至少让所有物品都可见并且不会折叠。 – dalind 2009-04-29 16:14:14