c# - 如何在 wpf 中关闭和重新打开一个窗口?
问题描述
我有一个带有按钮的 wpf 应用程序,它会打开一个新窗口,我想在其中确定一些设置。请参见以下代码:
public partial class MainWindow : Window
{
private SettingsWindow SettingsWindow;
public MainWindow()
{
InitializeComponent();
}
private void settings_Click(object sender, RoutedEventArgs e)
{
if (this.SettingsWindow == null)
{
SettingsWindow = new SettingsWindow(); // No reentrace here !!!
}
SettingsWindow.Show();
SettingsWindow.Focus();
}
}
但是,当我关闭 SettingsWindow 并想从 MainWindow 重新打开它时,整个应用程序会冻结。我认为该对象将在关闭时被销毁,因此在 if 子句中重新初始化。
我是否必须在 SettingsWindow 的关闭例程中进行覆盖,或者我是否忽略了其他内容?
解决方案
您将要跟踪是否SettingsWindow
已关闭。否则,您将重新显示一个可能已关闭并已处置的窗口。关闭窗口不会删除您对它的引用。
public class SettingsWindow : Window
{
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
this.IsClosed = true;
}
public bool IsClosed { get; private set; }
}
public partial class MainWindow : Window
{
private SettingsWindow settingsWindow;
private void settings_Click(object sender, RoutedEventArgs e)
{
if (this.settingsWindow == null || this.settingsWindow.IsClosed)
{
this.settingsWindow = new SettingsWindow();
}
this.settingsWindow.Show();
this.settingsWindow.Focus();
}
}
推荐阅读
- react-native - 为什么在执行“yarn publish”命令时不包含我的文件 index.d.ts?
- types - 为什么不能解决`n`和`plus n 0`之间的约束?
- r - 对列中的值进行索引
- excel - 从范围内的特定行集中返回正确的行
- javascript - 如何在 Angular 中向后播放动画?
- java - Android:当应用程序处于后台时,未从 BroadcastReceiver 调用 Activity
- python - python argparse corss 子命令选项
- javascript - 各种 JQuery datepicker 只允许最后一天
- c# - dotnet test runsettings 在运行时传递具有多个值的 testrun 参数
- python - 检查索引的内容是否等于下一个索引的内容