带到前面打开的UserControl前面

时间:2017-01-27 12:02:56

标签: c# wpf xaml

我正在使用一个父窗口和多个子用户控件开发WPF应用程序。这是我的父窗口xaml:

<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. 如果它打开只是把它带到前面而不是打开一个新实例?
  3. 提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用is运算符来确定Content属性当前是否设置为ctrStudentAdd

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

我注意到你的意思是“带到前面”。一旦将ContentControl的Content属性设置为另一个UC,对前一个UC的引用就会消失,“旧”UC有资格进行垃圾回收,除非有其他对象持有对它的引用。

如果您不希望每次在ContentControl中显示UserControl的新实例,您可以在窗口类中保留对它的引用,例如:

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