2017-01-27 12 views
1

親ウィンドウと複数の子ユーザーコントロールでWPFアプリケーションを開発しています。ここに私の親ウィンドウのXAMLです:前に開いたUserControlを前面に移動

<DockPanel> 
    <Menu DockPanel.Dock="Top"> 
     <MenuItem Header="STUDENT INFORMATION"> 
      <MenuItem Header="ADD" Cursor="Hand" Click="MenuItem_Click"></MenuItem> 
      <Separator></Separator> 
      <MenuItem Header="EDIT" Name="mnuEdit" Cursor="Hand" Click="mnuEdit_Click"></MenuItem> 
     </MenuItem>    
    </Menu> 

    <ContentControl x:Name="childWindow" Margin="10"></ContentControl> 
</DockPanel> 

これは、子フォームを開くために、私のC#のコードです:それは罰金働いて

 childWindow.Content = new ctrStudentAdd(); 

。しかし、メニュー項目を追加するにはどうすればいいですか?

  1. 選択したユーザーコントロールが既に開いているかどうかを確認しますか?
  2. 開いている場合は、新しいインスタンスを開く代わりに前面に表示するだけですか?

ありがとうございます。

答えて

1

あなたはContentプロパティが現在ctrStudentAddに設定されているかどうかを判断するためにis演算子を使用することができます。

if(childWindow.Content is ctrStudentAdd) 
{ 
    //... 
} 

私はあなたがが「最前面へ移動」によって何を意味するか確認してください注意しています。 ContentControlのContentプロパティを別のUCに設定すると、以前のものへの参照がなくなり、他のオブジェクトが参照を保持していない限り、「古い」UCはガベージコレクションの対象となります。

あなたがあなたのウィンドウクラスで、それへの参照を保持することができ、それはContentControlにに表示されるたびに、例えばユーザーコントロールの新しいインスタンスを作成したくない場合は、次の

public partial class MainWindow : Window 
{ 
    private readonly ctrStudentAdd _ctrStudentAdd = new ctrStudentAdd(); 
    private readonly ctrStudentEdit _ctrStudentEdit = new ctrStudentEdit(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Switch() 
    { 
     childWindow.Content = _ctrStudentAdd; 
     ... 
     childWindow.Content = _ctrStudentEdit; 
    } 
} 
+0

WinFormsのときにInをBringToFront() ' –

+0

親ウィンドウ*を前面に表示したいのですか?それでyoyはActivateを呼び出す必要があります。 ()メソッド:http://stackoverflow.com/questions/257587/bring-a-window-to-the-front-in-wpf – mm8

+0

気づいたように、私は2つのメニュー項目(UserControls)AddとEditを持っています。私が追加を開いて編集してもう一度追加すると、前のiially opened正面にusercontrolを追加します。ユーザコントロールのための 'Activate()'メトンはありません。 –

関連する問題