繁体   English   中英

滚动查看器中的WPF / C#Textwrapping使窗口调整大小变得迟钝

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM