覆盖MeasureOverride和ArrangeOverride时,不绘制WPF UserControl
我有一个用户控件,如下所示:覆盖MeasureOverride和ArrangeOverride时,不绘制WPF UserControl,wpf,user-controls,measureoverride,Wpf,User Controls,Measureoverride,我有一个用户控件,如下所示: <UserControl MaxHeight="32" MaxWidth="32" MinHeight="25" MinWidth="25"> <DockPanel> <!-- some stuff --> </DockPanel> </UserControl> 我知道我必须对UserControl的每个子级调用Measure和Arrange
<UserControl
MaxHeight="32"
MaxWidth="32"
MinHeight="25"
MinWidth="25">
<DockPanel>
<!-- some stuff -->
</DockPanel>
</UserControl>
我知道我必须对UserControl的每个子级调用
Measure
和Arrange
。由于DocPanel是我的UserControl的唯一子项,并且(据我所知)存储在UserControl的Content
属性中,因此我只需在这个Content属性上调用Measure
和Arrange
。但是,不显示UserControl。我做错了什么?根据您托管UserControl的方式,可能不会使用度量阶段返回的值。如果将其设置在具有星形行/列的网格或DockPanel中,则最终大小可能完全不同
您需要对排列阶段应用类似的逻辑,因此它将有效地忽略它所提供的任何额外空间
下面的代码应该可以工作,并且更简洁一些:
protected override Size MeasureOverride(Size availableSize) {
var desiredSize = base.MeasureOverride(availableSize);
var sideLength = Math.Min(desiredSize.Width, desiredSize.Height);
desiredSize.Width = sideLength;
desiredSize.Height = sideLength;
return desiredSize;
}
protected override Size ArrangeOverride(Size finalSize) {
var sideLength = Math.Min(this.DesiredSize.Width, this.DesiredSize.Height);
return base.ArrangeOverride(new Size(sideLength, sideLength));
}
protected override Size MeasureOverride(Size availableSize) {
var desiredSize = base.MeasureOverride(availableSize);
var sideLength = Math.Min(desiredSize.Width, desiredSize.Height);
desiredSize.Width = sideLength;
desiredSize.Height = sideLength;
return desiredSize;
}
protected override Size ArrangeOverride(Size finalSize) {
var sideLength = Math.Min(this.DesiredSize.Width, this.DesiredSize.Height);
return base.ArrangeOverride(new Size(sideLength, sideLength));
}