2013-06-21 43 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“。它可能是有用的。