![](/img/trans.png)
[英]Creating a Window object and then calling it in an other Window class in WPF C#
[英]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 中的對話框
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.