WPF创建同级窗口并关闭当前窗口
我需要的是我的窗口类中的这样一个事件处理程序。
void someEventHandler(object sender, RoutedEventArgs e) { MyNewWindow mnw = new MyNewWindow(); mnw.Owner = Window.GetWindow(this); mnw.ShowDialog(); this.Close(); }
Window.GetWindow(this)返回当前窗口的父窗口。
我曾想过当新窗口的所有者是当前窗口的父窗口时,它会等待父窗口; 而不是现在的。 但它并没有这样的方式。 当前窗口等待执行新的并且仅在之后关闭。
如果由于某种原因我使用Show()而不是ShowDialog(),则根本不显示窗口。
可能我需要一些委托方法,但我不知道从哪里开始。
编辑:我想我需要改进未来参考的问题:新窗口应该是父窗口的对话框。 如果我使用Show(),父窗口变得可访问,我不希望这样。 如果我使用ShowDialog()它会成为当前窗口的对话框,这意味着在新窗口关闭之前当前窗口不会关闭,我也不想要它。
关闭窗口会导致其拥有的所有窗口都关闭 。
如果您只是希望所有者窗口不可见,请尝试这样做;
void someEventHandler(object sender, RoutedEventArgs e) { MyNewWindow mnw = new MyNewWindow(); mnw.Owner = this; this.Hide(); // not required if using the child events below mnw.ShowDialog(); }
您可能希望在父窗口中挂接某个事件,该窗口根据您的要求关闭子窗口时会相应地执行操作。
编辑
你也许可以控制从孩子身上隐藏(多个父母);
void OnLoad(object sender, RoutedEventArgs e) { this.Owner.Hide(); } void Closed(object sender, RoutedEventArgs e) { this.Owner.Show(); }
如果我理解你想要做什么,你想要关闭当前窗口并将其替换为MyNewWindow,它是原始窗口的父窗口(可能是应用程序的主窗口)的窗口的子窗口。
要做到这一点,你应该使用:
mnw.Owner = this.Owner;
而不是调用GetWindow,它会返回当前的Window实例。 GetWindow的目的是获取包含一些其他UIElement的Window,就像在树下面的Button一样。 传入Window实例时,您只需返回传入的内容即可。
调用ShowDialog()
块。 这意味着,该方法仅在mnw
关闭时返回,并且仅在原始窗口关闭时返回。
如果将其更改为Show()
,则在原始窗口上调用Close()
时会立即Close()
mnw
。 因为Window.GetWindow(this)
返回this
。 因此,您将所有者设置this
,当您关闭this
, mnw
关闭。 这让我们:
MyNewWindow mnw = new MyNewWindow(); mnw.Owner = this.Owner; // may not be necessary mnw.Show(); this.Close();
这段代码似乎对我有用。
- 如何通过代码获取页面访问令牌?
- 找不到方法:’Void Google.Apis.Util.Store.FileDataStore..ctor(System.String)’
- 使用自定义IDownloadManager从WebBrowser控件访问AccessViolationException
- 如何从浏览器调用WCF服务OperationContract?
- T4获取解决方案的当前工作目录
- Visual Studio C#unit testing – 使用各种/多个测试初始化运行unit testing,多次运行相同的unit testing?
- readonly是否有任何运行时开销?
- 获取用户在浏览器中输入的确切URL
- 固定大小的结构类型数组