首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖MeasureOverride和ArrangeOverride时不绘制WPF UserControl

覆盖MeasureOverride和ArrangeOverride时不绘制WPF UserControl
EN

Stack Overflow用户
提问于 2010-03-09 21:47:59
回答 1查看 2.1K关注 0票数 6

我有一个看起来像这样的UserControl:

代码语言:javascript
复制
<UserControl
    MaxHeight="32"
    MaxWidth="32"
    MinHeight="25"
    MinWidth="25">
    <DockPanel>
        <!-- some stuff -->
    </DockPanel>
</UserControl>

除了最小/最大大小限制外,我还希望控件始终使用Width = Height绘制。所以我覆盖了MeasureOverrideArrangeOverride

代码语言:javascript
复制
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的每个子节点上调用MeasureArrange。由于DocPanel是我的UserControl的惟一子对象,并且(据我所知)存储在UserControl的Content属性中,因此我只对该内容属性调用MeasureArrange。但是,不会显示UserControl。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2011-02-24 10:36:05

根据您托管UserControl的方式,可能不会使用从测量阶段返回的值。如果您将其设置在带有星形行/列的网格或DockPanel中,则最终大小可能完全不同。

您需要将类似的逻辑应用到排列阶段,因此它将有效地忽略给定的任何额外空间。

下面的代码应该可以工作,而且更干净一些:

代码语言:javascript
复制
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));
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2409410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档