簡體   English   中英

如何從 C#/WPF 中的其他類打開一個新窗口?

[英]How to open a new Window from an other class in C#/WPF?

所以我仍在學習如何做 C# 應用程序,我實際上有一個窗口問題。

我創建了一個 WPF 項目,並將主窗口的某些部分分成了子部分(用戶控件),這樣我就可以使用更清晰的xaml代碼。 我有很多不同的 UserControl,例如UserControlMenuStrip 所有這些都在MainWindow

MenuStrip 里面有一個 MenuItem 叫做Parameters

<MenuItem Header="_Parameters" x:Name="MenuParameters"/>

我創建了一個名為ParametersWindow的新窗口。 我的目標是當我點擊項目時打開一個以主窗口為中心的子窗口。

但我真的不知道如何繼續? 我應該創建一個click=事件並在鏈接的UserControlMenuItem.xaml.cs鏈接文件中寫下代碼嗎? 還是在MainWindow.xaml.cs文件中? 或者也許是一個新的干凈的文件?

當我嘗試將它放在UserControlMenuItem.xaml.cs ,我無法正確設置窗口的所有者我創建此方法但我無法設置所有者:

private void OpenParametersWindow()
        {
            WindowParameters WinParam = new WindowParameters();
            WinParam.Owner = MainWindow();
            WinParam.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            WinParam.Show();
        }

而且,當我通過MainWindow.xaml.cs嘗試時,我什至無法獲取變量...

所以......我怎樣才能正確地打開窗口? 我應該在xaml.cs文件中執行它還是創建一個新文件以便更好地理解?

我創建了一個類並添加了一個靜態字段作為 MainWindow 來保存引用

class ReferenceClass
{
    public static MainWindow mainWindow = null;//firstly null.we will set it in WindowLoaded event.
}

您可以創建一個這樣的類,用於從您想要的任何地方訪問 MainWindow 的引用。將 MainWindow 引用提供給它的靜態字段。

主窗口加載事件

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    ReferenceClass.mainWindow = this; //setting the reference to static field of ReferenceClass.
}

菜單單擊(在 MenuStrip UserControl 上調用的事件)

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
    NewWindow nw = new NewWindow();
    nw.Owner = ReferenceClass.mainWindow;//Calling the reference of MainWindow from our class.
    nw.WindowStartupLocation = WindowStartupLocation.CenterOwner;
    nw.Show();
}

開始了

在此處輸入圖片說明

項目

在此處輸入圖片說明

只是解決這個問題的一種方法。我們可以找到更多比我更好的解決方案,但我在需要時使用這個解決方案。

可以通過以下方式獲得任何用戶控件的父窗口的句柄:

Window wndParent = System.Windows.Window.GetWindow(this);
WinParam.Show(wndParent);

但是在使用 WPF 時,使用 MVVM 模式更方便

在 WPF 中編寫 UI 時,最好使用 MVVM 模式實現它。 它允許您清楚地分離代碼和表示之間的關注點。 關於您關於如何設置Owner我建議閱讀本系列文章,這些文章是關於使用 MVVM 實現的 WPF 中的對話框

https://www.c-sharpcorner.com/article/dialogs-in-wpf-mvvm/

暫無
暫無

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

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