1

我创建了一个自定义 FrameworkElement 并通过 AddLogicalChild 方法添加了多个子项,它们也是 FrameworkElements。

但是没有渲染孩子,甚至没有调用 OnRender 方法。就像 MeasureOverride 和 ArrangeOverride 方法一样。

我做了一些研究,但我陷入了困境,也许有人可以帮助我。

这是我制作的两个类。在 ChildElement 类中,我在每个方法中都设置了一个断点。但是,如果调用了方法,则除了 ctor 之外没有。

public class HostElement : FrameworkElement
{
    public HostElement()
    {
        ChildElement ce;
        Int32 rows = 5;
        Int32 cols = 5;

        for (Int32 i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                ce = new ChildElement();

                this.AddLogicalChild(ce);
            }
        }
    }

    protected override void OnRender(DrawingContext drawingContext)
    {
        base.OnRender(drawingContext);

        drawingContext.DrawRectangle(Brushes.LightBlue, null, new Rect(0, 0, this.ActualWidth, this.ActualHeight));
    }
}

public class ChildElement : FrameworkElement
{
    public ChildElement()
    {
    }

    protected override void OnRender(DrawingContext dc)
    {
        base.OnRender(dc);
    }
    protected override Size MeasureOverride(Size availableSize)
    {
        return base.MeasureOverride(availableSize);
    }
    protected override Size ArrangeOverride(Size finalSize)
    {
        return base.ArrangeOverride(finalSize);
    }
}
4

1 回答 1

0

逻辑树和可视树之间是有区别的。你想这样做:

public class HostElement : Panel
{
    public HostElement()
    {
        ChildElement ce;
        Int32 rows = 5;
        Int32 cols = 5;

        for (Int32 i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                ce = new ChildElement();

                this.Children.Add(ce);
            }
        }
    }

    // etc...
}

有关逻辑树与可视树的更多信息

于 2015-07-28T22:18:25.523 回答