如何使用 WPF 用户控件关闭父窗口

这篇具有很好参考价值的文章主要介绍了如何使用 WPF 用户控件关闭父窗口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 用户控件关闭父窗口的主要内容,如果未能解决你的问题,请参考以下文章

WPF 用户控件父级

UserControl在wpf中使用父元素?

C# WPF如何关闭通过父窗口打开的所有子窗口

如何从作为wpf mvvm模式中的窗口打开的视图模型中关闭用户控件?

如何在WPF中进行模态对话?

在 WPF 中使用 WebBrowser 关闭窗口后音频继续播放文章来源地址https://www.toymoban.com/news/detail-609647.html

到了这里,关于如何使用 WPF 用户控件关闭父窗口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 如何在WPF中使用Winform控件

    如何在WPF中使用Winform控件

            要在WPF中使用WInform组件,必须将WInform组件放在宿主WindowsFormsHost中.  WindowsFormsHost 是WPF的一个控件,它允许在WPF应用程序中托管Windows Forms控件。 要使用 WindowsFormsHost 控件,您需要在WPF项目中添加对 WindowsFormsIntegration 程序集的引用。这是如何做的步骤: 在解决方案

    2024年02月12日
    浏览(9)
  • C# wpf 实现任意控件(包括窗口)更多调整大小功能

    C# wpf 实现任意控件(包括窗口)更多调整大小功能

    第一节 Grid内控件拖动调整大小 第二节 Canvas内控件拖动调整大小 第三节 窗口拖动调整大小 第四节 附加属性实现拖动调整大小 第五章 拓展更多调整大小功能(本章) 上一章我们已经实现了任意控件统一的拖动调整功能,能够方便的给任意控件设置拖动调整大小。开发过程

    2024年01月18日
    浏览(9)
  • WPF中用户控件和自定义控件

    WPF中用户控件和自定义控件

    无论是在WPF中还是WinForm中,都有用户控件(UserControl)和自定义控件(CustomControl),这两种控件都是对已有控件的封装,实现功能重用。但是两者还是有一些区别,本文对这两种控件进行讲解。 用户控件 注重复合控件的使用,也就是多个现有控件组成一个可复用的控件组

    2024年01月21日
    浏览(13)
  • WPF 已知问题 RadioButton 指定 GroupName 后关闭窗口可能导致无法选中

    本文记录一个 WPF 已知问题,当 WPF 的 RadioButton 指定 GroupName 且将 IsChecked 状态绑定到 ViewModel 上,将包含以上控件的代码的窗口显示两个,接着关闭其中一个。此时可以看到依然开着的窗口的 RadioButton 控件无法正确在用户界面上点击选中 此问题已经报告给 WPF 官方,请看 ht

    2024年02月08日
    浏览(8)
  • WPF 用户控件依赖注入赋值

    WPF 用户控件依赖注入赋值

    我一直想组件化得去开发WPF,因为我觉得将复杂问题简单化是最好的 cs部分 我将复杂的依赖注入的代码进行了优化,减少了重复内容的输入。 我现在依赖属性扩展封装在一个静态文件里面 记得UserControl.xaml里面绑定你ViewModel。这样的话有代码提示 我后面要根据Vue的单向数据

    2024年02月07日
    浏览(7)
  • 将OxyPlot封装成用户控件后在WPF中的应用

    将OxyPlot封装成用户控件后在WPF中的应用

    1、文件架构 2、加载依赖项 Newtonsoft.Json OxyPlot.Wpf 3、NotifyBase.cs 4、CartesianChartViewModel.cs 5、CartesianChart.xaml 6、CartesianChart.xaml.cs 7、AxisItemModel.cs 8、MainWindowViewModel。cs 9、MainWindow.xaml 10、MainWindow.xaml.cs

    2024年02月13日
    浏览(11)
  • element plus Message方法手动关闭,close方法使用

    欢迎点击领取-《前端开发面试题进阶秘籍》:前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的墙🔗 vue3.x setup写法是没有this的指向的;而element plus ui组件库也是没有的;近期的需求涉及到轮询接口,需要使用Message方法,Message 拥有可控的 duration, 默认的

    2024年02月09日
    浏览(11)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控件脏数据状态IsDirty的跟踪处理

    循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控件脏数据状态IsDirty的跟踪处理

    在我们窗口新增、编辑状态下的时候,我们往往会根据是否修改过的痕迹-也就是脏数据状态进行跟踪,如果用户发生了数据修改,我们在用户退出窗口的时候,提供用户是否丢弃修改还是继续编辑,这样在一些重要录入时的时候,可以避免用户不小心关掉窗口,导致窗口的数

    2024年02月08日
    浏览(7)
  • WPF --- 如何重写WPF原生控件样式

    上一篇中 WPF --- 重写DataGrid样式,因新产品UI需要,重写了一下微软 WPF 原生的 DataGrid 的样式,包含如下内容: 基础设置,一些基本背景色,字体颜色等。 滚动条样式。 实现圆角表格,重写表格的一些基础样式,例如 CellStyle , RowStyle , RowHeaderStyle , ColumnHeaderStyle 等。 重写过

    2024年02月05日
    浏览(21)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用户控件

    循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用户控件

    在我们创建界面元素的时候,不管在Vue3+ElementPlus的前端上,还是Winform桌面端上,都是会利用自定义用户控件来快速重用一些自定义的界面内容,对自定义用户控件的封装处理,也是我们开发WPF应用需要熟悉的一环。本篇随笔继续深入介绍介绍基于CommunityToolkit.Mvvm 和HandyCont

    2024年02月09日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包