首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在任何给定面板子类的ArrangeOverride基本实现期间,如何将Rect传递给UIElement的安排方法?

在任何给定面板子类的ArrangeOverride基本实现期间,如何将Rect传递给UIElement的安排方法?
EN

Stack Overflow用户
提问于 2016-02-13 21:02:40
回答 1查看 597关注 0票数 0

在DockPanel子类的ArrangeOverride方法中,我们要做的第一件事是调用基本实现,因为它是由谁来处理实际安排的。但是,在这里不讨论“为什么”(因为它与问题无关),我们需要得到基本实现 of ArrangeOverride传递给最后一个子级的安排方法的Rect。

是否有任何方法查询UIElement,以查看向其安排方法传递了什么rect?

比如说..。

代码语言:javascript
复制
protected override Size ArrangeOverride(Size arrangeSize)
{
    // Perform default arrangement
    var retVal = base.ArrangeOverride(arrangeSize);

    // Get the last element (if any)
    var lastElement = Children.OfType<UIElement>().LastOrDefault();

    // Get the Rect passed to the lastElement in the base.ArrangeOverride call
    var lastElementArrangeRect = (lastElement != null)
         ? lastElement.ArrangeRect // <-- This is what we're looking for
         : new Rect();

    return retVal;
}

我们发现的唯一方法是自己重新实现ArrangeOverride,因为这样我们就可以很明显地知道Rect使用了什么。但是,我们正在尝试使用与任何面板子类一起工作的代码。

EN

回答 1

Stack Overflow用户

发布于 2016-02-14 20:01:15

在我看来,你可以使用反射。通过监视Arrange类中的UIElement方法,您会发现使用Arrange方法本身的finalRect参数值设置了一个私有字段(称为_finalRect)。

这并不总是正确的:它取决于一些if条件(您只需要查看代码)。您还可以注意到,_finalRect私有字段由PreviousArrangeRect属性返回(它是一个内部属性)。

现在,您只需要一个静态帮助方法来检索该属性的值:

代码语言:javascript
复制
public static Rect GetPreviousArrangeRect(UIElement element)
{
    Type elementType;
    PropertyInfo propertyInfo;

    if (element != null)
    {
        elementType = element.GetType();
        propertyInfo = elementType.GetProperty("PreviousArrangeRect",
            BindingFlags.Instance | BindingFlags.NonPublic);

        return (Rect)propertyInfo.GetValue(element, null);
    }

    return Rect.Empty;
}

现在我不知道你的确切问题是什么,但我希望这个提示能帮助你解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35385301

复制
相关文章

相似问题

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