2013-06-21 77 views
2

我一直在WPF中的一個小視圖,其中包含幾個ButtonsListBox其項目的模板包含一個CheckBoxContentPresenter。當我開始在ListBox滾動ScrollBar上下移動laggy。這是一種性能問題,我認爲這是因爲CheckBoxes。我認爲CheckBoxes有一些渲染動畫,只需要幾毫秒就可以淡入點和那些同步,因此會出現滯後。列表框中的複選框使滾動滯後

我可能是錯的,也許這是別的東西導致這個問題。更進一步,只是作爲一個旁註,因爲它可能對你們很重要,我正在Windows 7上運行英特爾i5上的應用程序。

當我離開CheckBoxs遠離模板時,它運行得非常順利。

你們建議我做什麼?

我不知道如何禁用該動畫,我不希望這種緩慢的行爲。

編輯:我在我的列表框5000項

這是我的XAML:

<ListBox ItemsSource="{Binding Source}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <CheckBox IsChecked="{Binding Checked}"/> 
      <ContentPresenter Content="{Binding Text}"/> 
     </StackPanel> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

這是我的ViewModel:

public class ViewModel 
{ 
    public ViewModel() 
    { 
     this.Source = new ObservableCollection<ListItem>(); 
     for (int i = 0; i < 5000; i++) 
     { 
      this.Source.Add(new ListItem(){ Text = "test" + i, Checked = true }); 
     } 
    } 

    public ObservableCollection<ListItem> Source 
    { 
     get; 
     set; 
    } 
} 

public class ListItem 
{ 
    public bool Checked 
    { 
     get; 
     set; 
    } 

    public string Text 
    { 
     get; 
     set; 
    } 
} 

這是我的MainWindow.cs:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = new ViewModel(); 
    } 
} 
+0

嘗試使用'VirtualizingStackPanel.VirtualizationMode =「回收」'來提高滾動期間的性能。在極端情況下,請嘗試使用ScrollViewer.IsDeferredScrollingEnabled =「True」進行延遲滾動。有關詳細信息,請參閱:[link1](http://msdn.microsoft.com/en-us/library/cc716876.aspx)和[link2](http://msdn.microsoft.com/zh-cn/library/ cc716879.aspx)。 「CheckBox」的動畫可能與此無關。 –

+0

@Anatoliy發表您的評論作爲答覆,我會標記它。回收確實有一點幫助,謝謝你的建議。 IsDefScrolling不是我正在尋找的東西,但我會牢記它。 –

回答

1

嘗試使用VirtualizingStackPanel.VirtualizationMode="Recycling"來提高滾動期間的性能。在極端情況下,請嘗試使用ScrollViewer.IsDeferredScrollingEnabled="True"進行延遲滾動。欲瞭解更多信息,請參閱:

http://msdn.microsoft.com/en-us/library/cc716876.aspx

http://msdn.microsoft.com/en-us/library/cc716879.aspx

注:你可以嘗試運行在其它操作系統下,像這樣的代碼:的Windows XP。我有一種感覺,在Windows 7優化WPF渲染實施不同於XP。因爲一些代碼通常是XP,但通過七剎車(但也許我錯了)。

P.S.我發現很好article - 「提高WPF中的滾動性能」作者:Cedric Dussud「。它可能是有用的。