【发布时间】:2011-01-25 10:46:39
【问题描述】:
我有一个如下所示的 UserControl:
<UserControl
MaxHeight="32"
MaxWidth="32"
MinHeight="25"
MinWidth="25">
<DockPanel>
<!-- some stuff -->
</DockPanel>
</UserControl>
除了最小/最大尺寸约束之外,我希望控件始终使用Width = Height 绘制。所以我覆盖了MeasureOverride 和ArrangeOverride:
protected override Size MeasureOverride(Size availableSize)
{
var resultSize = new Size(0, 0);
((UIElement)Content).Measure(availableSize);
var sideLength = Math.Min(((UIElement)Content).DesiredSize.Width, ((UIElement)Content).DesiredSize.Height);
resultSize.Width = sideLength;
resultSize.Height = sideLength;
return resultSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
((UIElement)Content).Arrange(new Rect(0, 0, finalSize.Width, finalSize.Height));
return finalSize;
}
我知道我必须在 UserControl 的每个子项上调用 Measure 和 Arrange。由于 DocPanel 是我的 UserControl 的唯一子项,并且(在我的理解中)存储在 UserControl 的 Content 属性中,我只需在此 Content 属性上调用 Measure 和 Arrange。但是不显示 UserControl。我做错了什么?
【问题讨论】:
标签: wpf user-controls measureoverride