簡體   English   中英

將先前打開的 UserControl 置於前面

[英]Bring to front previously opened UserControl

我正在開發具有一個父窗口和多個子用戶控件的 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. 如果它是開放的,只是把它放在前面而不是打開一個新的實例?

提前致謝。

您可以使用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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM