WPF+MVVM案例实战(十四)- 封装一个自定义消息弹窗控件(下)

文章目录

  • 1、案例效果
  • 2、弹窗控件使用
    • 1.引入用户控件
    • 2、按钮命令实现
  • 3、总结
  • 4、源代码获取


1、案例效果

在这里插入图片描述

2、弹窗控件使用

1.引入用户控件

打开 Wpf_Examples 项目,在引用中添加用户控件库,在 MainWindow.xaml 界面引用控件库,代码如下(示例):

<Window x:Class="Wpf_Examples.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"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:converter="clr-namespace:Wpf_Examples.Converters"xmlns:local="clr-namespace:Wpf_Examples"xmlns:cc="clr-namespace:CustomControlLib;assembly=CustomControlLib"xmlns:uc="clr-namespace:UserControlLib;assembly=UserControlLib"DataContext="{Binding Source={StaticResource Locator},Path=Main}"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800" WindowStartupLocation="CenterScreen"><Grid><WrapPanel><Button Width="120" Height="40" FontSize="18" Content="警告弹窗" Command="{Binding ButtonClickCmd}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self},Path=Content}" Margin="8"/><Button Width="120" Height="40" FontSize="18" Content="错误弹窗" Command="{Binding ButtonClickCmd}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self},Path=Content}" Margin="8"/><Button Width="120" Height="40" FontSize="18" Content="提示弹窗" Command="{Binding ButtonClickCmd}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self},Path=Content}" Margin="8"/></WrapPanel></Grid>
</Window>

这里我们引用三种状态的弹窗来做实验,用 MessageBox 分别显示每种弹窗点击按钮的结果。

2、按钮命令实现

MainViewModel.cs 中按钮命令代码实现如下:

   public class MainViewModel : ObservableObject{public RelayCommand<string> ButtonClickCmd { get; set; }public MainViewModel(){ButtonClickCmd = new RelayCommand<string>(FunMenu);}private void FunMenu(string obj){var mainWindowInstance = App.Current.MainWindow; // 获取主窗口实例bool? result;//定义窗体点击的结果选项switch (obj){case "警告弹窗":var warningNotification = new UserControlLib.SMessageBox(){Icon = IconType.Warning,ButtonType = ButtonType.OkCancel,Title = "警告",Content = "这是一条警告信息",};warningNotification.Owner = mainWindowInstance; // 设置父窗口result = warningNotification.ShowDialog();MessageBox.Show($"点击窗体的结果是{result}", "提示", MessageBoxButton.OK);break;case "错误弹窗":var error = new UserControlLib.SMessageBox(){Icon = IconType.Error,ButtonType = ButtonType.Ok,Title = "错误",Content = "这是一条错误信息",};error.Owner = mainWindowInstance; // 设置父窗口result = error.ShowDialog();MessageBox.Show($"点击窗体的结果是{result}", "提示", MessageBoxButton.OK);break;case "提示弹窗":var info = new UserControlLib.SMessageBox(){Icon = IconType.Info,ButtonType = ButtonType.Ok,Title = "错误",Content = "这是一条错误信息",};info.Owner = mainWindowInstance; // 设置父窗口result = info.ShowDialog();MessageBox.Show($"点击窗体的结果是{result}", "提示", MessageBoxButton.OK);break;}}private void PopWindow(Window window){var mainWindowInstance = App.Current.MainWindow; // 获取主窗口实例window.Owner = mainWindowInstance;window.WindowStartupLocation = WindowStartupLocation.CenterOwner;window.ShowDialog();}}

Wpf_Examples 项目没有的同学可以看前面的章节。完成整个项目及MVVM框架的搭建WPF+MVVM案例实战(三)- 动态数字卡片效果实现

3、总结

以上,我们就已经实现了一个自定义弹窗控件的使用,感谢大家的关注,如果有想要其他WPF效果实现的小伙伴可以留言说明需求,本人看到后会根据需求推出对应功能实现的文章。

4、源代码获取

CSDN 下载链接:封装一个自定义消息弹窗控件

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

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

相关文章

C++(类继承、虚函数、多重继承)

类继承 &#xff08;1&#xff09;当创建一个类时&#xff0c;不需要重新编写新的成员变量和成员函数&#xff0c;只需要新建的类继承了一个已有的类的成员。已有的类称为基类或父类&#xff0c;新建的类称为派生类或子类。 &#xff08;2&#xff09;一个类可以有多个…

深度学习基础—循环神经网络(RNN)

引言 从本系列博客开始&#xff0c;我们将来一起学习一下NLP领域的相关基础知识&#xff0c;NLP领域重要的模型是RNN&#xff0c;在此之前&#xff0c;先来了解一些符号的含义。 1.符号定义 &#xff08;1&#xff09;符号定义 假设建立一个能够自动识别句中人名位置的序列模型…

Web测试和APP测试的区别

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 最近听到有些朋友说&#xff0c;移动端要比web端稍微难一些&#xff0c;涉及到的细节笔记要多&#xff0c;有转去做web测试的想法&#xff0c;看看在具体测试的时…

Linux TCP CC状态机

万字详文&#xff1a;TCP 拥塞控制详解 - 知乎bcc/tools/tcpcong.py at master iovisor/bccbcc/tools/tcpcong_example.txt at master iovisor/bcc 1.状态机 2.tcp map 拥塞算法历史 1974年&#xff0c;3次握手被提出&#xff1b;1978年&#xff0c;TCP和IP拆分成TCP/IP&…

视频设备一体化监控运维方案

随着平安城市、雪亮工程等项目建设的号召&#xff0c;视频监控系统的建设如火如荼地开展。无论在公共场所、企业单位、住宅小区、矿山工地还是交通枢纽&#xff0c;视频监控系统已成为保障安全、维护秩序和提升管理效率的重要工具。但由于对视频监控系统中的前端设备&#xff0…

深度数据修复软件哪个好?盘点2024年好用的4个数据恢复工具。

深度数据修复软件可以帮助用户深入存储设备&#xff0c;找回丢失的数据。它们可以有效解决很多场景下的数据丢失问题&#xff0c;如果大家平时会有数据丢失的情况&#xff0c;可以用这几个工具去尝试一些自己进行数据恢复。 1、福昕深度恢复软件 直通车&#xff1a;http://www…

leetcode-73-矩阵置零

题解&#xff1a; 1、初始化变量ls_row与ls_col分别用来存储元素0的所在行与列&#xff1b; 2、获取矩阵的行数M与列数N&#xff1b; 3、遍历矩阵matrix的每一个元素。如果这个元素为0&#xff0c;则将该元素所在行数append到ls_row&#xff0c;所在列append到ls_col。 4、…

树莓派基本设置--2. raspi-config工具介绍

raspi-config是树莓派操作系统Raspberry Pi OS中预装的配置工具&#xff1b;raspi-config提供了一种简单便捷的命令行界面来管理树莓派系统的配置&#xff0c;使用户可以轻松地定制和优化其系统设置。 如果使用的是树莓派桌面系统&#xff0c;可以直接在桌面左上角的应用菜单&…

五、鸿蒙开发-组件状态管理

提示&#xff1a;本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、状态管理入门1.1 State1.2 Prop1.3 Link1.4 Provide和Consume 二、状态管理深入2.1 …

STM32学习笔记-GPIO

参考江科大32单片机学习相关知识 GPIO基本构造 APB2&#xff08;Advanced Peripheral Bus 2&#xff09;是STM32微控制器架构中的一个外设总线&#xff0c;用于连接一些高性能外设&#xff0c;如定时器、USART、ADC和GPIO等。这些外设通常对性能要求较高&#xff0c;需要更快的…

java陕西民俗网源码(springboot)

项目简介 陕西民俗网实现了以下功能&#xff1a; 中国陕西民俗网的主要使用者分为&#xff1a; 管理员增删改查商品信息和商品信息资料&#xff0c;审核商品信息预订订单&#xff0c;查看订单评价和评分&#xff0c;通过留言功能回复用户提问。 &#x1f495;&#x1f495;作…

【python】OpenCV—WaterShed Algorithm

文章目录 1、功能描述2、代码实现3、完整代码4、效果展示5、涉及到的库函数5.1、cv2.pyrMeanShiftFiltering5.2、cv2.morphologyEx5.3、cv2.distanceTransform5.4、cv2.normalize5.5、cv2.watershed 6、更多例子7、参考 1、功能描述 基于分水岭算法对图片进行分割 分水岭分割…

选择最佳SCRM系统的综合指南

内容概要 在如今竞争激烈的市场中&#xff0c;企业不能仅仅依靠传统的客户管理方式&#xff0c;需要借助现代化的SCRM系统来提升效率和服务水平。SCRM系统&#xff0c;就是“社交客户关系管理”系统&#xff0c;旨在通过社交媒体等渠道与客户进行更深层次的互动。在选择合适的…

学习threejs,导入OBJ格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.OBJLoader OBJ模型加…

动态规划 —— 路径问题-下降路径最小和

1. 下降路径最小和 题目链接&#xff1a; 931. 下降路径最小和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-falling-path-sum/description/ 2. 算法原理 状态表示&#xff1a;以莫一个位置位置为结尾 dp[i&#xff0c;j]表示&#xff1a;到…

ubuntu20.04 加固方案-设置限制su命令用户组

一、编辑/etc/pam.d/su配置文件 打开终端。 使用文本编辑器&#xff08;如vim&#xff09;编辑/etc/pam.d/su文件。 vim /etc/pam.d/su 二、添加配置参数 在打开的配置文件的中&#xff0c;添加以下参数&#xff1a; auth required pam_wheel.so 创建 wheel 组 并添加用户 …

ElementUI学习笔记

一、ElementUI概述 官网&#xff1a;https://element.eleme.cn/#/zh-CN &#xff08;一&#xff09;定义 Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。是基于Vue的一个UI框架&#xff0c;该框架基于Vue开发了很多相关组件&#xf…

JS面试八股文(四)

&#x1f60a;JS面试八股文&#xff08;四&#xff09; 31.精灵图和base64的区别是什么&#xff1f;32.svg格式了解多少&#xff1f;33.了解过JWT吗&#xff1f;34.npm的底层环境是什么&#xff1f;35.HTTP协议规定的协议头和请求头有什么&#xff1f;36.说一下浏览器的缓存策略…

Android平台RTSP|RTMP播放器高效率如何回调YUV或RGB数据?

技术背景 我们在做Android平台RTSP、RTMP播放器的时候&#xff0c;经常遇到这样的技术诉求&#xff0c;开发者希望拿到播放器解码后的YUV或RGB数据&#xff0c;投递给视觉算法&#xff0c;做AI分析&#xff0c;本文以ffmpeg和大牛直播SDK的SmartPlayer为例&#xff0c;介绍下相…

深度学习常见面试题及答案(41~45)

关注公众号&#xff1a;『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或➕v&#xff1a;codebiubiubiu滴滴我 文章目录 41、解释一下神经网络中的激活函数的作用是什么&#xff1f;常见的激活函数有哪些&#xff1f;一、激活函数的作用二、常见的激活…