簡體   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