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

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.kler.cn/a/374418.html

相关文章:

  • 微软edge浏览器 v131.0.2903.99便携版
  • 使用Python开发高级游戏:实现一个3D射击游戏
  • 强大且灵活的终端工具Tabby的强大功能与详细配置指南
  • springboot/ssm社区助老志愿者服务平台Java代码编写web志愿捐赠活动项目
  • 重温设计模式-外观模式和适配器模式的异同
  • C语言结构体位定义(位段)的实际作用深入分析
  • 二:Linux学习笔记(第一阶段)-- Linux命令
  • 记一次:Clickhouse同步mysql数据库
  • 基于Spring Boot的医疗陪护系统设计与实现(源码+定制+开发)病患陪护管理平台、医疗服务管理系统、医疗陪护信息平台
  • 【PCL】vs2022配置PCL环境
  • RHCE第三次实验
  • 强大的文本编辑器Notepad++8.4.6 最新版
  • 【回溯】力扣 77.组合
  • [数组基础] 0238. 除自身以外数组的乘积
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解
  • 音频剪辑怎么做?盘点10款高效的音频剪辑工具
  • Android 利用socket 来实现 自动升级apk
  • linux 中文实用型手册 基于RHEL(红帽系)
  • 三网折扣话费充值接口对接详细步骤?
  • 速盾:海外CDN高防解析.提升网站安全与速度
  • 在 .NET 8 Web API 中实现 Entity Framework 的 Code First 方法
  • 【算法系列-二叉树】对称翻转二叉树
  • docker安装、设置非sudo执行、卸载
  • CesiumJS 案例 P15:检测标记、鼠标点击移动标记、鼠标拖动标记
  • CSS Text(文本)
  • HTML CSS