ListBox中的CheckBoxes使滚动延迟

时间:2013-06-21 05:55:33

标签: wpf xaml wpf-controls

我一直在开发一个WPF中的小视图,其中包含一些Buttons和一个ListBox,其项目的模板包含CheckBoxContentPresenter。当我开始在ListBox滚动时,ScrollBar上下移动迟滞。这是一种性能问题,我认为这是因为CheckBoxes。我认为CheckBoxes有某种渲染动画,在滴答片中淡入淡出需要几毫秒,然后运行同步,因此会出现滞后现象。

我可能是错的,也许这是造成这个问题的其他因素。另外,作为一个旁注,因为它可能对你们很重要我在Windows 7上运行英特尔i5上的应用程序。

当我离CheckBoxs远离模板时,它运行得非常顺利。

你们建议我做什么?

我不知道如何禁用该动画,我不想要那种迟缓的行为。

编辑:我的ListBox中有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();
    }
}

1 个答案:

答案 0 :(得分: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 - &#34;提高WPF中的滚动性能。作者:塞德里克·杜苏德&#34;。它可能很有用。