2016-03-22 4 views
0

とユーザーコントロールを追加使用した後、私はそうのよう.Child使用してユーザーコントロールに切り替える:Grid1コンテンツがメインウィンドウに座っグリッドである戻り<code>MainWindow.xaml.cs</code>で.Child

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

を、(どのユーザーコントロールの後ろから覗き込んますいくつかのコンテンツがありますので)隠された、とStageは、私は、ユーザーコントロールが

<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" > 
UserControlName閉じることができますどのように

またはHIDDを埋めたいborder要素であるべきですenを自分のxaml.csファイルから取得し、ビューをメインウィンドウに戻すと同時にMainWindowGrid1Visibleに戻しますか?

答えて

1

PRISM(https://msdn.microsoft.com/en-us/library/ff921098(v=pandp.40).aspx)の領域を使用して実装します。しかし、単純なアプリケーションを作成し、PRISMを学ぶ時間を費やしたくない場合、たとえば、MainWindow型のパラメータを追加してUserControlNameクラスのコンストラクタを拡張し、このオブジェクトに対してビューを希望の状態に変更するメソッドを呼び出すことができます。 ugllyコードの 例:

メインウィンドウ:

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

ユーザーコントロール:

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

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

別の選択肢は、(例えば)MVVMライトツールキットおよびメッセージング(https://msdn.microsoft.com/en-us/magazine/jj694937.aspx)を使用することです。

子ビューはメッセージを送信して閉じます。メインウィンドウはこのメッセージを受け取り、グリッドを非表示にします。

メリットは、メインウィンドウと子コントロールがまだ結合されていないことです。これは、子ウィンドウがメインウィンドウについて何も知る必要がないことを意味します。

この機会に、MvvmパターンやMvvmライトなどのライブラリに時間をかけてください。

関連する問題