How to close parent windows using WPF User Control
如何使用 WPF 用户控件关闭父窗口
【问题描述】
假设有两个WPF窗口:window1和window2。
window1有一个按钮,单击此按钮将打开window2。window2包含一个用户控件。此用户控件有一个用于关闭window2的按钮。
怎样才能实现这个场景呢?
【解决方案1】
在创建的自定义控件中,从按钮事件单击中访问父窗口。
简单地说:
var myWindow = Window.GetWindow(this);
myWindow.Close();
或者使用可视化树:
var myWindow = (Window)VisualParent.GetSelfAndAncestors().FirstOrDefault(a=>a is Window);
myWindow.Close();
当然,另一种时创建一个显示”MyButtonClicked“的自定义事件,然后让承载UserControl的窗口监听此事件,并在触发事件时关闭当前窗口。
[解决方案2] (讨论 )
实现此功能时为了在window2打开时关闭window1,但如果你将这些代码放在相应的区域中,它应该可以在任何情况下从任何地方关闭任何窗口:
创建一个存储Window对象的类,以及一个将关闭它的函数:
CloseWindow.cs
public static class CloseWindow{
public static Window WinObject;
public static void CloseParent(){
try{
((Window)WinObjcet).Close();
}catch(Exception ex)
{
string value = e.Message.ToString(); //do whatever with this
}
}
}
在父窗口(您要关闭的窗口-window2,在这种情况?)中,在其onload事件中,将其Window对象设置为等于CloseWindow.WinObject:
CloseWindow.WinObject = (Window)this;
然后,在孩子的onLoad事件中(或者,在OP的情况下,在Window2的用户控件的按钮事件中),让它执行CloseParent()函数:
if(CloseWindow.WinObject != null)
{
CloseWindow.CloseParent();
}
【讨论】【参考方案3】:
您可以尝试使用 EventAggregator 在不同的 ViewModel 中实现此事件驱动逻辑。
http://www.codeproject.com/Articles/355473/Prism-EventAggregator-Sample
以上是关于如何使用 WPF 用户控件关闭父窗口的主要内容,如果未能解决你的问题,请参考以下文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构