0

「OnMoseDown」メソッドをオーバーライドしたカスタム キャンバス クラスが既にあります。しかし、今は「Children.Add」メソッドもオーバーライドしたいと考えています。しかし、解決策は見つかりませんでした。

子がキャンバスに追加されたときに Child.ActualWidth を取得したい。

ありがとう。

4

2 に答える 2

1

私は自分で自分の答えを見つけました。これがいつか誰かを助けることを願っています。

Custom クラスに Add メソッドを追加しました

public void Add(UserControl element)
{
    bool alreadyExist = false;
    element.Uid = element.Name;
    foreach (UIElement child in this.Children)
    {
        if (child.Uid == element.Uid)
        {
            alreadyExist = true;
            this.BringToFront(child);
        }
    }
    if (!alreadyExist)
    {
        this.Children.Add(element);
        this.UpdateLayout();
        double top = (this.ActualHeight - element.ActualHeight) / 2;
        double left = (this.ActualWidth - element.ActualWidth) / 2;
        Canvas.SetLeft(element, left);
        Canvas.SetTop(element, top);
    }
}        
于 2012-05-01T07:51:08.073 に答える
0

これは正しく動作しない可能性があります。ActualWidthプロパティはレイアウト フェーズで設定されるため、設定される前に子が追加されます。

ここでの目的によっては、代わりに andをオーバーライドMeasureOverrideし、をサブクラス化する代わりにカスタム レイアウト パネルを作成することを検討することをお勧めします。ArrangeOverrideCanvas

于 2012-04-30T23:55:54.040 に答える