【发布时间】:2014-02-21 12:15:51
【问题描述】:
我创建的 WPF 控件继承了 FrameworkElement 类。其中一个是这样完成的:
[ContentProperty("Children")]
public class ItemsElement : FrameworkElement
{
public ItemsElement()
{
Children = new UIElementCollection(this, this);
}
public UIElementCollection Children { get; private set; }
protected override int VisualChildrenCount
{
get
{
if (Children != null)
{
return Children.Count;
}
return 0;
}
}
protected override Visual GetVisualChild(int index)
{
return Children[index];
}
protected override IEnumerator LogicalChildren
{
get
{
if (Children != null)
{
return Children.GetEnumerator();
}
return EmptyEnumerator.Instance;
}
}
protected override Size MeasureOverride(Size availableSize)
{
return availableSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
return finalSize;
}
}
我希望这段代码的元素不是 2D-UI 元素。我重写了 Measure 和 Arrange 方法,这样它就不会计算孩子的大小。这是我想要的行为,因为这些计算繁重且无用。
问题是,如果我将 ContentControls 和 ItemsControls 放在我的 ItemsElement 类的子项中(通过 XAML),这些控件似乎不会使用我在资源中为它们定义的 DataTemplate 从 Content/ItemsSource 生成它们的 Visual 子项。
如果我在 MeasureOverride 方法的开头添加此代码,它确实有效:
foreach (UIElement child in Children)
{
child.Measure(availableSize);
}
我不明白为什么......
你有什么想法吗?
谢谢!
【问题讨论】:
标签: wpf