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