1

カスタム FrameworkElement を作成し、AddLogicalChild メソッドを使用して、FrameworkElement でもある複数の子を追加しました。

ただし、子はレンダリングされず、OnRender メソッドも呼び出されません。メソッド MeasureOverride および ArrangeOverride と同様です。

私はいくつかの調査を行いましたが、行き詰まりました。誰かが私を助けてくれるかもしれません。

これが私が作った2つのクラスです。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 に答える