当前位置: 首页 > news >正文

WPF中如何在MVVM模式下关闭窗口

完全来源于十月的寒流,感谢大佬讲解

使用Behaviors

<Window x:Class="Test_03.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:b="http://schemas.microsoft.com/xaml/behaviors"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:Test_03"WindowStyle="None"mc:Ignorable="d"Height="450" Width="800"><Window.DataContext><local:MainWindowViewModel></local:MainWindowViewModel></Window.DataContext><Grid><TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50" Text="{Binding Title}"></TextBlock><StackPanel Margin="5.0" HorizontalAlignment="Right" VerticalAlignment="Top"Orientation="Horizontal"><StackPanel.Resources></StackPanel.Resources><Button Margin="5.0" Content="_"><b:Interaction.Triggers><b:EventTrigger EventName="Click"><b:ChangePropertyAction TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window}}" PropertyName="WindowState" Value="{x:Static WindowState.Minimized}"></b:ChangePropertyAction></b:EventTrigger></b:Interaction.Triggers></Button><Button Margin="5.0" Content="[ ]"><b:Interaction.Triggers><b:EventTrigger EventName="Click"><b:ChangePropertyAction TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window}}" PropertyName="WindowState" Value="{x:Static WindowState.Maximized}"></b:ChangePropertyAction></b:EventTrigger></b:Interaction.Triggers></Button><Button Margin="5.0" Content="X" Background="Red"><b:Interaction.Triggers><b:EventTrigger EventName="Click"><b:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window}}" MethodName="Close"></b:CallMethodAction></b:EventTrigger></b:Interaction.Triggers></Button></StackPanel></Grid>
</Window>

讲解

  1. <b:Interaction.Triggers>: 是一个开始定义触发器的标记。通常,这个标记包含在一个控件的开始标记和结束标记之间,用于指定将要应用触发器的控件。

  2. <b:EventTrigger EventName="Click">: 表示一个事件触发器,告诉XAML在指定的事件发生时执行后续定义的动作。在这里,事件名称为"Click",表示当用户点击与此触发器相关联的UI元素时触发。

  3. <b:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window}}" MethodName="Close"></b:CallMethodAction>: 这是触发器的动作部分。使用了CallMethodAction,这是一种行为,用于调用方法。指定了要调用的方法是窗口(Window)的Close方法。

    • TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window}}": 这部分指定了目标对象,即将要调用方法的对象。在这里,通过使用RelativeSource,找到了最近的窗口(Window)并将其绑定为目标对象。

    • MethodName="Close": 这部分指定了要调用的方法的名称,即窗口的Close方法。

因此,整个代码的作用是,当与此触发器相关联的UI元素(可能是一个按钮)被点击时,会调用最近的窗口的Close方法,关闭该窗口。

相关文章:

  • 大数据Doris(二十六):数据导入(Routine Load)介绍
  • 【大数据分布并行处理】单元测试(五)
  • Spring中有哪几种方法获取HttpSession对象
  • 4 redis的HyperLogLog入门原理
  • java发送媒体类型为multipart/form-data的请求
  • 云课五分钟-0Cg++默认版本和升级-std=c++17
  • 将 Fedora 38 平滑升级至 Fedora 39
  • 工厂设计模式
  • 聊聊logback的MDCFilter
  • CSS英文单词强制截断换行
  • Redisson 分布式锁实战应用解析
  • 【2017年数据结构真题】
  • 基于springboot实现应急救援物资管理系统项目【项目源码】计算机毕业设计
  • 面试求职者
  • 在Ubuntu上用sane api实现通用扫描功能
  • 收藏网友的 源程序下载网
  • CentOS7 安装JDK
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • exports和module.exports
  • Hexo+码云+git快速搭建免费的静态Blog
  • Hibernate【inverse和cascade属性】知识要点
  • Laravel 实践之路: 数据库迁移与数据填充
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Zsh 开发指南(第十四篇 文件读写)
  • 分布式事物理论与实践
  • 浮现式设计
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 区块链共识机制优缺点对比都是什么
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 说说动画卡顿的解决方案
  • 微信小程序--------语音识别(前端自己也能玩)
  • 在weex里面使用chart图表
  • 如何正确理解,内页权重高于首页?
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #pragma multi_compile #pragma shader_feature
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (12)目标检测_SSD基于pytorch搭建代码
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (done) 两个矩阵 “相似” 是什么意思?
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET企业级应用架构设计系列之开场白
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 数据结构 - C++]红黑树RBTree
  • [AIGC] MySQL存储引擎详解
  • [Angular 基础] - 指令(directives)
  • [Angularjs]ng-select和ng-options