2016-03-22 4 views
0

In MainWindow.xaml.cs Schaltern I auf ein Benutzersteuerelement .child Verwendung wie folgt:Rückkehr zum Hauptfenster nach einer Benutzersteuerelement mit .child Verwendung Hinzufügen

Grid1.Visibility = Visibility.Hidden; 
Stage.Child = new UserControlName(); 

Wo Grid1 das Gitter, wo der Inhalt in dem Hauptfenster sitzt (welche sollte versteckt werden, da einige Inhalte gibt es, die hinter dem Usercontrol spähen heraus wird) und Stage ist ein border Element, wo ich die Usercontrol

<Grid > 
    <Border x:Name="Stage" Grid.RowSpan="4" Grid.ColumnSpan="2"/> 
    <Grid x:Name="Grid1" FocusManager.FocusedElement="{Binding ElementName=textBox}" Margin="10,10,10,10" Width="1200" Height="649" > 

füllen möchten Wie kann UserControlName geschlossen oder hidd werden de aus seiner eigenen xaml.cs Datei und die Ansicht in das Hauptfenster zurückgegeben werden, während gleichzeitig MainWindow 's Grid1 zu Visible zurückgeben?

Antwort

1

Ich würde das mit Regionen von PRISM (https://msdn.microsoft.com/en-us/library/ff921098(v=pandp.40).aspx) implementieren. Wenn Sie jedoch eine einfache Anwendung erstellt haben und keine Zeit investieren möchten, um PRISM zu lernen, können Sie beispielsweise den Konstruktor der Klasse UserControlName erweitern, indem Sie den Parameter MainWindow-Typ hinzufügen und für dieses Objekt eine Methode aufrufen, die die Ansicht in Ihren Wunschzustand ändert. Beispiel uglly Code:

Mainwindow:

 private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     grid1.Visibility = Visibility.Hidden; 
     br.Child = new UserControl2(this); 
    } 

    public void CloseView() 
    { 
     grid1.Visibility = Visibility.Visible; 
     br.Child = null; 
    } 

Usercontrol:

private MainWindow window; 
    public UserControl2(MainWindow window) 
    { 
     this.window = window; 
     InitializeComponent(); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     window.CloseView(); 
    } 
1

Eine weitere Option ist (zum Beispiel) zu verwenden, das MVVM Light Toolkit und Messaging (https://msdn.microsoft.com/en-us/magazine/jj694937.aspx).

Die untergeordnete Ansicht würde eine Nachricht senden, um geschlossen zu werden, das Hauptfenster würde diese Nachricht erhalten und das Raster ausblenden.

Der Vorteil ist, dass das Hauptfenster und das Kindsteuerelement immer noch nicht gekoppelt sind, was bedeutet, dass das Kind nichts über das Hauptfenster wissen muss.

Nutzen Sie diese Chance und investieren Sie einige Zeit in das Mvvm-Muster und Bibliotheken wie Mvvm light.

Verwandte Themen