c# - 如何从 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 引用提供给它的静态字段。
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();
}
开始了
项目
这只是解决此问题的一种方法。我们可以找到比我更好的解决方案,但我在需要时会使用此解决方案。
推荐阅读
- python - 将int数据类型转换为日期时间python
- python - 泛型类型 T 的 Python 子类列表
- javascript - 从应该返回用于 iframe src 的链接的 api 调用获得错误的请求响应
- mongodb - MongoDB 副本节点变为“(不可访问/健康)”
- javascript - 如何在 LI 项目之间添加新行,以便在复制到 google docs 时在 LI 项目之间有一个空行
- forms - 将 hCaptcha 用于两个按钮的表单
- php - 在 php 中使用 youtube api v3 但出现错误
- reactjs - TypeError: _firebase_config__WEBPACK_IMPORTED_MODULE_1__.db.collection 不是函数 firebase
- flutter - 如何在我的颤振应用程序上删除这个空间
- git - 警告:“C:\ProgramData/Git/config”的所有者可疑:“S-1-5-21-2380165290-1749897186-383349493-670437”