私は既に 'OnMoseDown'メソッドをオーバーライドしたカスタムCanvasクラスを持っています。 しかし、今私は 'Children.Add'メソッドをオーバーライドしたい。 しかし、私は解決策を見つけませんでした。WPFのCanvasクラスのChildren.Addメソッドをオーバーライドする方法
子供がキャンバスに追加されると、Child.ActualWidthを取得します。
ありがとうございました。
私は既に 'OnMoseDown'メソッドをオーバーライドしたカスタムCanvasクラスを持っています。 しかし、今私は 'Children.Add'メソッドをオーバーライドしたい。 しかし、私は解決策を見つけませんでした。WPFのCanvasクラスのChildren.Addメソッドをオーバーライドする方法
子供がキャンバスに追加されると、Child.ActualWidthを取得します。
ありがとうございました。
私は自分で答えを見つけました。これがいつか誰かを助けてくれることを願っています。
はちょうど私のカスタムクラスで
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
が設定される前に子が追加されます。
ここにあなたの目標に応じて、あなたの代わりにMeasureOverride
とArrangeOverride
をオーバーライドし、making a custom layout panel代わりのCanvas
をサブクラス化することを検討することをお勧めします。
をAddメソッドを追加していますが、独自のパネルクラスを作成した場合、彼らはサイズ –
@KishoreJangidを受け入れるようどのように私は、私がリンク先の記事のように、この方法で追加された子を取得しますあなたはいつでもあなたの 'InternalChildren'を手に入れることができました... http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.internalchildren.aspx –
どのように私が追加する私の以前のドラッグキャンバス –