「OnMoseDown」メソッドをオーバーライドしたカスタム キャンバス クラスが既にあります。しかし、今は「Children.Add」メソッドもオーバーライドしたいと考えています。しかし、解決策は見つかりませんでした。
子がキャンバスに追加されたときに Child.ActualWidth を取得したい。
ありがとう。
「OnMoseDown」メソッドをオーバーライドしたカスタム キャンバス クラスが既にあります。しかし、今は「Children.Add」メソッドもオーバーライドしたいと考えています。しかし、解決策は見つかりませんでした。
子がキャンバスに追加されたときに Child.ActualWidth を取得したい。
ありがとう。
私は自分で自分の答えを見つけました。これがいつか誰かを助けることを願っています。
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);
}
}
これは正しく動作しない可能性があります。ActualWidth
プロパティはレイアウト フェーズで設定されるため、設定される前に子が追加されます。
ここでの目的によっては、代わりに andをオーバーライドMeasureOverride
し、をサブクラス化する代わりにカスタム レイアウト パネルを作成することを検討することをお勧めします。ArrangeOverride
Canvas