【发布时间】:2016-06-28 12:01:02
【问题描述】:
我正在尝试分析我的代码的性能,并更好地了解 WPF 对我在 ListBox 中用作 ItemsPanel 的画布的重绘行为。为此,我定义了一个派生自ListBoxItem 的自定义类MyListBoxItem(参见下面的代码)。
不幸的是,我无法弄清楚如何在 ListBox 中使用此类。我尝试将MyListBoxItem 实例列表绑定到 XAML 中的ListBox.Items,就像这样Items="{Binding Path=ListBoxItemsList}",但随后出现错误
'Items' 属性是只读的,不能从标记中设置。
有什么方法可以实现吗?或者也许还有其他替代方法可以实现我正在做的事情? (即重绘行为的分析)
MyListBoxItem的定义:
public class MyListBoxItem : ListBoxItem
{
public MyListBoxItem(ObjectViewModel vm)
{
this.DataContext = vm;
}
Size? arrangeResult;
protected override Size MeasureOverride(Size constraint)
{
var vm = (this.DataContext as ObjectViewModel);
if (vm != null)
{
Debug.WriteLine("For ObjectViewModel " + vm.Name + ":");
}
arrangeResult = null;
System.Console.WriteLine("MeasureOverride called for " + this.Name + ".");
return base.MeasureOverride(constraint);
}
protected override System.Windows.Size ArrangeOverride(System.Windows.Size arrangeSize)
{
if (!arrangeResult.HasValue)
{
System.Console.WriteLine("ArrangeOverride called for " + this.Name + ".");
// Do your arrange work here
arrangeResult = base.ArrangeOverride(arrangeSize);
}
return arrangeResult.Value;
}
protected override void OnRender(System.Windows.Media.DrawingContext dc)
{
System.Console.WriteLine("OnRender called for " + this.Name + ".");
base.OnRender(dc);
}
}
【问题讨论】: