2012-04-30 6 views
0

私は既に 'OnMoseDown'メソッドをオーバーライドしたカスタムCanvasクラスを持っています。 しかし、今私は 'Children.Add'メソッドをオーバーライドしたい。 しかし、私は解決策を見つけませんでした。WPFのCanvasクラスのChildren.Addメソッドをオーバーライドする方法

子供がキャンバスに追加されると、Child.ActualWidthを取得します。

ありがとうございました。

答えて

0

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

はちょうど私のカスタムクラスで

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); 
    } 
}   
0

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

ここにあなたの目標に応じて、あなたの代わりにMeasureOverrideArrangeOverrideをオーバーライドし、making a custom layout panel代わりのCanvasをサブクラス化することを検討することをお勧めします。

+0

をAddメソッドを追加していますが、独自のパネルクラスを作成した場合、彼らはサイズ –

+0

@KishoreJangidを受け入れるようどのように私は、私がリンク先の記事のように、この方法で追加された子を取得しますあなたはいつでもあなたの 'InternalChildren'を手に入れることができました... http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.internalchildren.aspx –

+0

どのように私が追加する私の以前のドラッグキャンバス –

関連する問題