首页 > 解决方案 > 如何从 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文件中执行此操作还是创建一个新文件以便更好地理解?

标签: c#wpfxaml

解决方案


我创建了一个类并添加了一个静态字段作为 MainWindow 来保存引用

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

您可以创建一个这样的类,以便从任何您想要的地方访问 MainWindow 的引用。将 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();
}

开始了

在此处输入图像描述

项目

在此处输入图像描述

只是解决此问题的一种方法。我们可以找到比我更好的解决方案,但我在需要时会使用此解决方案。


推荐阅读