我一直在开发一个WPF中的小视图,其中包含一些Buttons
和一个ListBox
,其项目的模板包含CheckBox
和ContentPresenter
。当我开始在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();
}
}
答案 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;。它可能很有用。