2013-04-26 39 views
19

Kullanıcı penceresinden ana pencereye erişmeye çalışıyorum. Bu kod Kullanıcı penceresinden ana denetim penceresine erişme

userControl1 uc1 = new userControl1(); 

mainGrid.Children.Add(uc1); 

ana şebekeye userControl1 yükleyin.

Ama userControl1 içinde bir düğmeye tıkladığımda, başka bir userControl2 ana pencerede bulunan mainGrid içine yüklemek istiyorum?

Window1.cs

:

bu örneğe bakın:

cevap

40

Eğer
Window yourParentWindow = Window.GetWindow(userControl1); 
+0

evet denedim ama sonra userControl2'yi mainGrid'e nasıl yükleyebilirim? –

+0

Window yourParentWindow = Window.GetWindow (userControl1); yourParentWindow.mainGrid.children.add (yeni userControl2); Bu kod doğru mu? –

+0

yourParentWindow.mainGrid.Children.Add (new userControl2()) –

0

ana pencerenin statik örneğini olun, sadece kullanıcı denetiminde diyebilirsiniz

denediniz
public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
      _Window1 = this; 
     } 
     public static Window1 _Window1 = new Window1(); 

    } 

UserControl1.cs

public partial class UserControl1 : UserControl 
    { 
     public UserControl1() 
     { 
      InitializeComponent(); 

     } 
     private void AddControl() 
     { 
      Window1._Window1.MainGrid.Children.Add(usercontrol2) 
     } 
    } 
+0

Bu çözüm, söz konusu pencerenin birden çok örneğinin açık olması durumunda çalışmaz. Yorumunuzda bunun çalışması için "Ana pencere" ye başvurduğunuzu görüyorum (ki bu sadece bir tane olacağını tahmin ediyorum). Bununla birlikte, bunun tüm pencere tiplerine ölçeklenmediğine dikkat edilmelidir. – curob

1

yardım bana adamlar için teşekkürler. ben başka bir çözüm

((this.Parent) as Window).Content = new userControl2(); 

bu mükemmel Bu kök düzeyi penceresi alır

+2

Dikkat: Burada, denetiminizin üst öğesinin her zaman bir Pencere örneği olacağını varsayabilirsiniz. – Crono

11

çalışır var:

Window parentWindow = Application.Current.MainWindow 

veya hemen üst pencere

Window parentWindow = Window.GetWindow(this); 
0

tek sebebi önerilen

Doğru türüne döküm yoktu çünkü sizin için

hiç bir çalışma geçerli: pencere türünüze ve denetimi arasındaki yol daha kavrama olacaksa olmadıkça

var win = Window.GetWindow(this) as MyCustomWindowType; 

if (win != null) { 
    win.DoMyCustomWhatEver() 
} else { 
    ReportError("Tough luck, this control works only in descendants of MyCustomWindowType"); 
} 

, ben düşünün senin kötü tasarım yaklaşımı.

Denetimin bir yapıcı parametresi olarak çalışacağı, bir özelliğe dönüştürdüğü veya herhangi bir Window içerisindeki uygun (kök?) Izgarayı dinamik olarak arayacağı ızgarayı geçmeyi öneririm.

İlgili konular