WPF mvvm框架Stylet使用教程-窗体交互用法

news2025/1/13 2:38:07

窗体操作

打开窗体

在stylet框架中,要打开一个窗口或者对话框,只需要直接使用窗口管理器

在要使用的ViewModel中注入IWindowManager,然后使用他的方法操作窗口。

  • ShowDialog(object viewModel)模态显示
  • ShowWindow(object viewModel) 非模态显示
  • ShowMessageBox()消息框

示例:

在View中增加三个按钮
在这里插入图片描述

        <Button
            Width="140"
            Height="57"
            Margin="781,188,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Command="{s:Action ShowDialogAbout}"
            Content="打开弹窗"
            FontSize="20" />
        <Button
            Width="140"
            Height="57"
            Margin="781,269,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Command="{s:Action ShowAbout}"
            Content="打开窗口"
            FontSize="20" />
        <Button
            Width="140"
            Height="57"
            Margin="781,356,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Command="{s:Action ShowMsg}"
            Content="打开消息框"
            FontSize="20" />

在对应ViewModel中,构造方法中注入一个IWindowManager, 在ViewModel中获取到IWindowManager 对象

  private IWindowManager _windowManager;
  
 public ShellViewModel(IWindowManager windowManager)
{

    _windowManager= windowManager;
}

然后实现三个方法,分别使用IWindowManager 的方法ShowDialog()、ShowWindow()、ShowMessageBox()打开窗口和消息框

/// <summary>
/// 打开一个About窗口,模态显示
/// </summary>
public void ShowDialogAbout()
{
    _windowManager.ShowDialog(new AboutViewModel());
}

/// <summary>
/// 打开一个About窗口,非模态显示
/// </summary>
public void ShowAbout()
{
    _windowManager.ShowWindow(new AboutViewModel());
}

/// <summary>
/// 打开一个消息对话框,输入参数跟windows消息框一样
/// </summary>
public void ShowMsg()
{
    _windowManager.ShowMessageBox("这是一个重要消息", "重要", MessageBoxButton.OK, MessageBoxImage.Information);

}

完整的ShellViewModel.cs代码如下

  public class ShellViewModel : Screen
    {



        public void ChangeTitle()
        {

        }

        private IWindowManager _windowManager;

        public ShellViewModel(IWindowManager windowManager)
        {
            _windowManager= windowManager;
        }

        /// <summary>
        /// 打开一个About窗口,模态显示
        /// </summary>
        public void ShowDialogAbout()
        {
            _windowManager.ShowDialog(new AboutViewModel());
        }

        /// <summary>
        /// 打开一个About窗口,非模态显示
        /// </summary>
        public void ShowAbout()
        {
            _windowManager.ShowWindow(new AboutViewModel());
        }

        /// <summary>
        /// 打开一个消息对话框,输入参数跟windows消息框一样
        /// </summary>
        public void ShowMsg()
        {
            _windowManager.ShowMessageBox("这是一个重要消息", "重要", MessageBoxButton.OK, MessageBoxImage.Information);

        }
    }

运行便可以操作窗口打开了

在这里插入图片描述

关闭窗体

关闭窗体需要使用基类Screen中的方法RequestClose(),

在窗体上增加一个关闭按钮,绑定方法Close

在这里插入图片描述

 <Button
            Width="39"
            Height="26"
            Margin="21,21,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Command="{s:Action Close}"
            Content="关闭" />
            

然后在ViewModel中实现关闭方法

  public void Close()
{
    this.RequestClose();
}

就可以实现窗体关闭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/436050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改OPNET帮助文档的默认打开浏览器 给Edge浏览器配置IE Tab插件

我在使用 OPENT Modeler 软件时经常会用到帮助文档&#xff0c;但是其默认打开的是 IE 浏览器&#xff0c;想要其在 Edge 浏览器中打开&#xff0c;但是会出现网页无法打开的情况&#xff0c;这时需要给 Edge 浏览器安装一个 IE Tab 插件。 IE Tab 插件是专门针对浏览器而开发的…

vue3的介绍和两种创建方式(cli和vite)

目录 一、vue3的介绍 &#xff08;一&#xff09;vue3的简介 &#xff08;二&#xff09;vue3对比vue2带来的性能提升 二、vue3的两种创建方式 方式一&#xff1a;使用vue-cli创建&#xff08;推荐--全面&#xff09; 操作步骤 方式二&#xff1a;使用vite创建 操作步…

Spring是什么?关于Spring家族

初识Spring 什么是Spring&#xff1f; Spring是一个开源的Java企业级应用程序开发框架&#xff0c;由Rod Johnson于2003年创建&#xff0c;并在接下来的几年里得到了广泛的发展和应用。它提供了一系列面向对象的编程和配置模型&#xff0c;支持开发各种类型的应用程序&#x…

黑客网站攻击的主要手段

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 黑客与白帽子 有的童鞋觉得黑客和白帽子是同一回事儿&#xff0c;其实不然&#xff1b;而且&#xff0c;他们的工作方式与目标也有很大的差异。 黑客是指一群专门使用计算机…

9.2 变量的指针和指向变量的指针变量

9.2 变量的指针和指向变量的指针变量 一.指针变量的定义二.指针变量的引用三.整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记 一.指针变量的定义 变量的指针 就是变量的地址。 我们可以定义一个指向 变量 的指针变量。 这种指针变量&#xff0c;我们在定义的时…

信创办公–基于WPS的EXCEL最佳实践系列 (筛选重要数据)

信创办公–基于WPS的EXCEL最佳实践系列 &#xff08;筛选重要数据&#xff09; 目录 应用背景操作步骤1、筛选2、高级筛选 应用背景 在WPS里&#xff0c;筛选有两种&#xff0c;一种是筛选&#xff0c;另外一种则是高级筛选。 操作步骤 1、筛选 可以根据学号、准考证号、考…

MyBatisPlus基础入门学习

系列文章目录 MyBatisPlus基础入门学习 文章目录 系列文章目录前言一、MyBatisPlus简介1.入门案例2.MyBatisPlus概述 二、标准数据层开发1.标准数据层CRUD功能2.分页功能 三、DQL控制1.条件查询方式2.查询投影3.查询条件设定4.字段映射与表名映射 四、DML控制1.Insert2.Delete…

原创文章生成器在线版-ai写作生成器

随着人工智能技术的迅猛发展&#xff0c;越来越多的人开始意识到&#xff0c;利用AI可以实现许多以前不可能想象的事情。其中&#xff0c;一种最能体现人工智能技术优势的应用就是“ai原创文章生成器”。它可以为营销从业者提供一种全新的营销推广方式。 那么&#xff0c;什么是…

AIGC技术赋能下 CRM将迎来怎样的变革?

今年以来&#xff0c;随着ChatGPT的爆火&#xff0c;人工智能&#xff08;AI&#xff09;迎来新一轮的热潮&#xff0c;开始更多地走入人们的视野。如果说2016年“阿尔法狗”&#xff08;Alpha Go&#xff09;大战围棋世界冠军还只是人工智能的“昙花一现”&#xff0c;那么Cha…

在 FPGA 上如何实现双线性插值的计算?

作者 | 殷庆瑜 责编 | 胡巍巍 目录 一、概述 二、What&#xff1f;什么是双线性插值&#xff1f; 二、Why&#xff1f;为什么需要双线性插值&#xff1f; 三、How&#xff1f;怎么实现双线性插值&#xff1f; 关键点1 像素点选择 关键点2 权重计算 升级1 通过查表减少…

深入分析Linux网络丢包

1、背景&#xff1a; 从图中你可以看出&#xff0c;可能发生丢包的位置&#xff0c;实际上贯穿了整个网络协议栈。换句话说&#xff0c;全程都有丢包的可能。 在两台 VM 连接之间&#xff0c;可能会发生传输失败的错误&#xff0c;比如网络拥塞、线路错误等&#xff1b;在网卡…

大数据实战 --- 淘宝用户行为

目录 开发环境 数据描述 功能需求 数据准备 数据清洗 用户行为分析 找出有价值的用户 开发环境 HadoopHiveSparkHBase 启动Hadoop&#xff1a;start-all.sh 启动zookeeper&#xff1a;zkServer.sh start 启动Hive&#xff1a; nohup hiveserver2 1>/dev/null 2>…

计算机体系结构基本概念,指令系统

Amdahl定律 这个定律告诉我们去优化系统中最重要&#xff08;占比最大&#xff09;的部分&#xff0c;作业有个问题&#xff0c;是系统中有多个部件可以改进&#xff0c;可改进部分比例的分母是整个任务&#xff0c;并不是独属于部件 i i i的任务&#xff0c;因此扩展的Amdahl定…

kubespray 部署 kubernetes 排错细节仅供参考

文章目录 1. TASK [kubernetes/preinstall : Hosts | create list from inventory]2: TASK [container-engine/containerd : containerd Create registry directories]3. TASK [kubernetes/control-plane : kubeadm | Initialize first master]4. reslov.conf 权限无法修改5. i…

LeetCode算法小抄 -- 环检测算法 和 拓扑排序算法

LeetCode算法小抄 -- 环检测算法 和 拓扑排序算法 环检测算法(DFS)[207. 课程表](https://leetcode.cn/problems/course-schedule/) 拓扑排序算法(DFS)[210. 课程表 II](https://leetcode.cn/problems/course-schedule-ii/) 环检测算法(BFS)拓扑排序算法(BFS) ⚠申明&#xff1…

第四章-图像加密与解密

加密与加密原理 使用异或运算实现图像加密及解密功能。 异或运算规则(相同为0,不同为1) 运算数相同,结果为0;运算数不同,结果为1任何数(0/1)与0异或,结果仍为自身任何数(0/1)与1异或,结果为另外一个数,即0变1, 1变0任何数和自身异或,结果为0 同理到图像加密解密 加密过程:…

Stable Diffusion成为生产力工具(六):制作一张庆祝五一劳动节的海报

S&#xff1a;AI能取代设计师么&#xff1f; I &#xff1a;至少在设计行业&#xff0c;目前AI扮演的主要角色还是超级工具&#xff0c;要顶替&#xff1f;除非甲方对设计效果无所畏惧~~ 预先学习&#xff1a; 安装webui《Windows安装Stable Diffusion WebUI及问题解决记录》。…

JS逆向 - 破解oklink加密参数及加密数据

版权声明&#xff1a;原创不易&#xff0c;本文禁止抄袭、转载&#xff0c;侵权必究&#xff01; 目录 一、JS逆向目标-会当临绝顶二、JS逆向分析-不识庐山真面目三、JS逆向测试-只缘身在此山中四、JS反逆向-柳暗花明又一村五、oklink逆向完整代码下载六、作者Info 一、JS逆向目…

Redis --- 常用命令、Java中操作Redis

一、Redis常用命令 1.1、字符串string操作命令 Redis 中字符串类型常用命令&#xff1a; SET key value 设置指定key的值 GET key 获取指定key的值 SETEX key seconds value 设置指定key的值&#xff0c;并将 key 的过期时间设为 seconds 秒 SETNX key value 只有在 key 不…

Java入坑之抽象类、设计模式与接口

目录 一、抽象类 1.1定义 1.2特点 1.3使用场景 1.4抽象方法 1.5抽象类的实现 1.6开-闭原则 1.7匿名类 二、设计模式&#xff08;了解&#xff09; 2.1定义 2.2分类 2.3模板设计模式 2.4单例模式 三、接口 3.1定义 3.2语法格式 3.3接口实现 3.4接口类型变量 …