![](/img/trans.png)
[英]ListBox, VirtualizingStackPanel, and Smooth Scrolling in WPF
[英]Memory leaks while scrolling in WPF VirtualizingStackPanel
在使用VirtualizingStackPanel和textBlock时,我的XAML代码如下所示,
<Grid>
<ItemsControl Name="NameItemsControl"
VirtualizingStackPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding Path=NameList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=TaskName}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Template>
<ControlTemplate>
<Border>
<ScrollViewer>
<ItemsPresenter />
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
</Grid>
在.cs中,我有以下代码,
public partial class MainWindow : Window
{
private List<Task> Tasks;
public MainWindow()
{
InitializeComponent();
Tasks = new List<Task>();
for (int i = 1; i < 1000; i++)
{
Task task = new Task() { TaskName = "Task " + i, Id = i, Size = 20 };
Tasks.Add(task);
}
NameItemsControl.ItemsSource = Tasks;
}
}
public class Task
{
public string TaskName { get; set; }
public int Id { get; set; }
public int Size { get; set; }
}
我可以在滚动时看到内存泄漏,我正在使用VS 2013性能和诊断程序来跟踪泄漏。 这是我在托管堆中看到的
它显示ConditionalWeakTable<Object,Object>
计数在滚动时正在增加。 有什么办法可以解决此问题? 由于某些原因,我不想设置
VirtualizingStackPanel.VirtualizationMode="Recycling"
在ItemsControl
上设置VirtualizingStackPanel.VirtualizationMode="Recycling"
以避免内存泄漏。 在这种情况下,我遇到了同样的问题,设置VirtualizingStackPanel.VirtualizationMode="Recycling"
解决了该问题。
<ItemsControl Name="NameItemsControl"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding Path=NameList}">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.