WPF实战学习笔记22-添加自定义询问窗口
添加自定义询问窗口
详细代码:https://github.com/DongLiqiang/Mytodo/commit/221de6b2344d5c861f1d3b2fbb2480e3e3b35c26
添加自定义询问窗口显示方法
修改文件Mytodo.Extensions.DialogExtension
添加内容,类中添加内容
/// <summary>
/// 显示方法
/// </summary>
/// <param name="name"></param>
/// <param name="parameters"></param>
/// <param name="dialogHostName"></param>
/// <returns></returns>
public static async Task<IDialogResult> Question(this IDialogHostService dialogHost,string Title, string Content, string dialogHostName = "Root")
{DialogParameters param = new DialogParameters();//添加参数param.Add("Title", Title);param.Add("Content", Content);param.Add("DialogHostName", dialogHostName);//返回对话框实例return await dialogHost.ShowDialog("MsgView",param, dialogHostName);
}
自定义窗体
自定义界面
添加文件Mytodo.Views.MsgView.xaml
<UserControlx:Class="Mytodo.Views.MsgView"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:local="clr-namespace:Mytodo.ViewModels"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"d:DesignHeight="450"d:DesignWidth="800"mc:Ignorable="d"><Grid><Grid.RowDefinitions><RowDefinition Height="auto" /><RowDefinition /><RowDefinition Height="auto" /></Grid.RowDefinitions><TextBlockPadding="5"d:Text="温馨提示"FontSize="14"Text="{Binding Title}" /><TextBlockGrid.Row="1"Padding="15,0"VerticalAlignment="Center"d:Text="确认删除该数据吗?"FontSize="14"Text="{Binding Content}" /><StackPanelGrid.Row="2"Margin="10"HorizontalAlignment="Right"Orientation="Horizontal"><ButtonMargin="0,0,10,0"Command="{Binding CancelCommand}"Content="取消"Style="{StaticResource MaterialDesignOutlinedButton}" /><Button Command="{Binding SaveCommand}" Content="确定" /></StackPanel></Grid>
</UserControl>
添加窗体模型
添加文件:Mytodo.ViewModels.MsgViewModel
using MaterialDesignThemes.Wpf;
using Mytodo.Dialog;
using MyToDo.Share.Models;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Mytodo.ViewModels
{class MsgViewModel: BindableBase, IDialogHostAware{#region 命令定义#endregion#region 属性定义/// <summary>/// 对话框内容/// </summary>public string Content{get { return content; }set { content = value; }}/// <summary>/// 对话框标题 /// </summary>public string Title{get { return title; }set { title = value; }}#endregion#region 重要字段定义#endregion#region 字段定义private string content;private string title;#endregionpublic MsgViewModel(){SaveCommand = new DelegateCommand(Save);CancelCommand = new DelegateCommand(Cancel);}/// <summary>/// 取消/// </summary>private void Cancel(){if (DialogHost.IsDialogOpen(DialogHostName))DialogHost.Close(DialogHostName, new DialogResult(ButtonResult.No)); //取消返回NO告诉操作结束}/// <summary>/// 确定/// </summary>private void Save(){if (DialogHost.IsDialogOpen(DialogHostName)){//确定时,把编辑的实体返回并且返回OKDialogParameters param = new DialogParameters();DialogHost.Close(DialogHostName, new DialogResult(ButtonResult.OK, param));}}public string DialogHostName { get; set; }public DelegateCommand SaveCommand { get; set; }public DelegateCommand CancelCommand { get; set; }public void OnDialogOpend(IDialogParameters parameters){//获取Titleif (parameters.ContainsKey("Title"))Title = parameters.GetValue<string>("Title");//获取Contentif (parameters.ContainsKey("Content"))Content = parameters.GetValue<string>("Content");}}
}
依赖注入
修改:App.xaml.cs
RegisterTypes函数添加
containerRegistry.RegisterForNavigation<MsgView, MsgViewModel>();
使用
主界面
修改文件:Mytodo.Views.MainView.cs
修改为
using Mytodo.Common.Events;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Prism.Events;
using Mytodo.Extensions;
using MaterialDesignThemes.Wpf;
using Mytodo.Dialog;
using Prism.Ioc;namespace Mytodo.Views
{/// <summary>/// MainView.xaml 的交互逻辑/// </summary>public partial class MainView : Window{ private readonly IDialogHostService dialoghost;/// <summary>/// 订阅消息/// </summary>public MainView(IEventAggregator aggregator,IContainerProvider provider){//检索实例dialoghost= provider.Resolve<IDialogHostService>();aggregator.Register(arg =>{DialogHost.IsOpen = arg.IsOpen;if (DialogHost.IsOpen)DialogHost.DialogContent = new ProgressView();});InitializeComponent();menuBar.SelectionChanged += (s, e) =>{drawerHost.IsLeftDrawerOpen = false;};btnclo.Click += async (s, e) =>{//展开确认对话框var queres = await DialogExtension.Question(dialoghost, "温馨提示", $"是否要关闭此程序?");if (queres.Result != Prism.Services.Dialogs.ButtonResult.OK) return;this.Close();};btnmin.Click += (s, e) =>{this.WindowState = WindowState.Minimized;};btnmax.Click += (s, e) =>{this.WindowState = WindowState.Maximized;};ColorZone.MouseMove += (s, e) =>{if (e.LeftButton == MouseButtonState.Pressed)this.DragMove();};ColorZone.MouseDoubleClick += (s, e) =>{if (WindowState != WindowState.Normal)WindowState = WindowState.Normal;elseWindowState = WindowState.Maximized;};}}
}
待办
修改文件Mytodo.ViewModels.TodoViewModel.cs
添加内容
private readonly IDialogHostService dialoghost;
修改内容:
public TodoViewModel(ITodoService service,IContainerProvider provider) : base(provider)
{//检索对话框的实例dialoghost = provider.Resolve<DialogHostService>();//初始化对象TodoDtos = new ObservableCollection<ToDoDto>(); RightContentTitle = "添加血雨待办";//初始化命令SelectedCommand = new DelegateCommand<ToDoDto>(Selected);OpenRightContentCmd = new DelegateCommand(Add);ExecuteCommand = new DelegateCommand<string>(ExceuteCmd);DeleteCommand = new DelegateCommand<ToDoDto>(DeleteItem);this.service = service;
}
/// <summary>
/// 删除指定项
/// </summary>
/// <param name="dto"></param>
async private void DeleteItem(ToDoDto dto)
{//展开确认对话框var queres = await DialogExtension.Question(dialoghost, "温馨提示", $"是否要删除此项?{dto.Title}?");if (queres.Result != Prism.Services.Dialogs.ButtonResult.OK) return;var delres = await service.DeleteAsync(dto.Id);if (delres.Status){var model = TodoDtos.FirstOrDefault(t => t.Id.Equals(dto.Id));TodoDtos.Remove(dto);}
}
备忘录
修改文件Mytodo.ViewModels.MemoViewModel.cs
添加内容
private readonly IDialogHostService dialoghost;
修改内容
/// <summary>
/// 删除指定项
/// </summary>
/// <param name="dto"></param>
async private void DeleteItem(MemoDto dto)
{//展开确认对话框var queres = await DialogExtension.Question(dialoghost,"温馨提示",$"是否要删除此项?{dto.Title}?");if (queres.Result != Prism.Services.Dialogs.ButtonResult.OK) return;var delres = await service.DeleteAsync(dto.Id);if (delres.Status){var model = MemoDtos.FirstOrDefault(t => t.Id.Equals(dto.Id));MemoDtos.Remove(dto);}
}
public MemoViewModel(IMemoService service, IContainerProvider provider) : base(provider)
{//初始化对象MemoDtos = new ObservableCollection<MemoDto>();RightContentTitle = "添加备忘率";//初始化命令SelectedCommand = new DelegateCommand<MemoDto>(Selected);OpenRightContentCmd = new DelegateCommand(Add);ExecuteCommand = new DelegateCommand<string>(ExceuteCmd);DeleteCommand = new DelegateCommand<MemoDto>(DeleteItem);//检索DialogHostService类型的实例dialoghost = provider.Resolve<DialogHostService>();this.service = service;
}
相关文章:
WPF实战学习笔记22-添加自定义询问窗口
添加自定义询问窗口 详细代码:https://github.com/DongLiqiang/Mytodo/commit/221de6b2344d5c861f1d3b2fbb2480e3e3b35c26 添加自定义询问窗口显示方法 修改文件Mytodo.Extensions.DialogExtension 添加内容,类中添加内容 /// <summary> /// …...
Spring Boot项目的创建
hi 大家好,又见面了,今天继续讲解Spring Boot 文章目录 🐶1.什么是Spring Boot?🐶2.Spring Boot的优势🐶3.Spring Boot项目创建🌼3.1使用ieda创建🥝3.1.1下载插件Spring Boot Helper🥝3.1.2创建项目 &…...
Python加载数据的5种方法
大家好,今天回顾五种引入数据的Python技术,并附有代码实例参考。 我们将使用Numpy、Pandas和Pickle包,所以要导入它们: import numpy as np import pandas as pd import pickle Manual功能 这是最困难的,因为你必须…...
QPoint、QLine、QSize、QRect
QPoint、QLine、QSize、QRect QPointQLineQSizeQRect QPoint // 构造函数 // 构造一个坐标原点, 即(0, 0) QPoint::QPoint(); // 参数为 x轴坐标, y轴坐标 QPoint::QPoint(int xpos, int ypos);// 设置x轴坐标 void QPoint::setX(int x); // 设置y轴坐标 void QPoint::setY(in…...
vue+leaflet笔记之地图量测
vueleaflet笔记之地图量测 文章目录 vueleaflet笔记之地图量测开发环境代码简介插件简介与安装使用简介图形量测动态量测 详细源码(Vue3) 本文介绍了Web端使用Leaflet开发库进行距离量测的一种方法 (底图来源:天地图),结合leaflet-measure-path插件能够快速的实现地…...
“深入理解SpringBoot:从入门到精通的几个关键要点“
标题:深入理解Spring Boot:从入门到精通 摘要:本文将深入探讨Spring Boot的关键要点,帮助读者从入门到精通。我们将从Spring Boot的基本概念开始,介绍自动配置、起步依赖、注解驱动开发等特性,并通过示例代…...
数值线性代数: 共轭梯度法
本文总结线性方程组求解的相关算法,特别是共轭梯度法的原理及流程。 零、预修 0.1 LU分解 设,若对于,均有,则存在下三角矩阵和上三角矩阵,使得。 设,若对于,均有,则存在唯一的下三…...
【JVM】详解对象的创建过程
文章目录 1、创建对像的几种方式1、new关键字2、反射3、clone4、反序列化 2、创建过程步骤 1、检查类是否已经被加载步骤 2、 为对象分配内存空间1、指针碰撞针对指针碰撞线程不安全,有两种方案: 2、空闲列表选择哪种分配方式 步骤3、将内存空间初始化为…...
华纳云:ubuntu下如何搭建nfs服务
在Ubuntu下搭建NFS(Network File System)服务,可以实现网络文件共享。以下是在Ubuntu上搭建NFS服务的步骤: 安装NFS服务器和客户端软件: 打开终端,并使用以下命令安装NFS服务器和客户端软件: sudo apt-get update s…...
HCIA实验二
实验要求: 1.R2为ISP,只能配置IP 2.R1-R2之间为HDLC封装 3.R2-R3之间为PPP封装,pap认证,R2为主认证方 4.R2-R4之间为PPP封装,chap认证,R2为主认证方 5.R1、R2、R3构建MGRE,仅R1的IP地址固定…...
stm32 舵机 cubemx
文章目录 前言一、cubemx配置二、代码1.serve.c2.serve.h3.主函数 总结 前言 stm32对舵机进行控制,很简单直接一个pwm就可以实现 pwm的周期是50HZ占空比分别对应 一个0.5ms的高电平对应于0度 一个1.5ms的高电平对应于90度 一个2.5ms的高电平对应于180度 因此&#…...
无涯教程-jQuery - Spinner组件函数
Widget Spinner 函数可与JqueryUI中的窗口小部件一起使用。Spinner提供了一种从一组中选择一个值的快速方法。 Spinner - 语法 $( "#menu" ).selectmenu(); Spinner - 示例 以下是显示Spinner用法的简单示例- <!doctype html> <html lang"en"…...
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
Python 有趣的模块之pynupt ——通过pynput控制鼠标和键盘 文章目录 Python 有趣的模块之pynupt ——通过pynput控制鼠标和键盘1️⃣简介2️⃣鼠标控制与移动3️⃣键盘控制与输入4️⃣结语📢 1️⃣简介 🚀🚀🚀学会控制鼠标和键盘是…...
docker基于centos7镜像安装python3.7.9
下载centos7镜像 docker pull centos:centos7 启动容器centos-python-3.7 docker run -itd --name centos-python-3.7 -p 60021:22 --privileged centos:centos7 /usr/sbin/init 进入容器 docker exec -it centos-python-3.7 /bin/bash centos7环境下安装python3.7.…...
JavaScript中的switch语句
switch语句和if语句一样,同样是运用于条件循环中; 下面例子我们用switch实现 例如如果今天是周一就学习HTML,周二学习CSS和JavaScript,周三学习vue,周四,周五学习node.js,周六周日快乐玩耍&…...
Jquery笔记
DOM对象通过jquery获取 所有的代码都是基于引入jquery.js文件 var mydiv $(#div);//直接获取到DOM对象元素id var mydiv$(.div);//通过class获取DOM对象,如果有同名class只会获取第一个 var mysapn$(span);//通过元素的标签名获取DOM对象 var divarr$(…...
【C++】优先级队列的基本概念以及其模拟实现
文章目录 补充知识:仿函数一、优先级队列:1.引入2.介绍 二、priority_queue的模拟实现1.大体框架2.私有成员函数:1.向下调整(AdjustDown)2.向上调整(AdjustUp) 3.公有成员函数1大小(…...
TextClamp for Vue3.0(Vue3.0的文本展开收起组件)
呦!大家好,好久没有更新博客了,最近实现了一个一直想自己完成的一个东西,就是文本的展开收起组件,以前项目需要用到,自己实现一个又太繁琐,所以那个时候都是用的别人的轮子,现在自己…...
区间预测 | MATLAB实现VAR向量自回归时间序列区间预测
区间预测 | MATLAB实现VAR向量自回归时间序列区间预测 目录 区间预测 | MATLAB实现VAR向量自回归时间序列区间预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 区间预测 | MATLAB实现VAR向量自回归时间序列区间预测 VAR(Vector Autoregression)模型是一种广泛应用于时…...
在 Windows 上搭建 NTP 服务器
文章目录 一、基础环境二、适用场景三、操作步骤四、常用的NTP服务器五、参考资料 版权声明:本文为博主原创文章,于2023年7月30日首发于CSDN,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/u011046671 一、基础…...
应急响应经典案例-FTP 暴力破解
应急响应经典案例-FTP 暴力破解 应急场景日志分析应急处理措施 应急场景 从昨天开始,网站响应速度变得缓慢,网站服务器登录上去非常卡,重启服务器就能保证一段时间的正常访问,网站响应状态时而飞快时而缓慢,多数时间是…...
41. linux通过yum安装postgresql
文章目录 1.下载安装包2.关闭内置PostgreSQL模块:3.安装postgresql服务:4.初始化postgresql数据库:5.设置开机自启动:6.启动postgresql数据库7.查看postgresql进程8.通过netstat命令或者lsof 监听默认端口54329.使用find命令查找了一下postgresql.conf的配置位置10.修改postgre…...
SpringBoot启动流程及自动配置
SpringBoot启动流程源码: 1、启动SpringBoot启动类SpringbootdemoApplication中的main方法。 SpringBootApplication public class SpringbootdemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootdemoApplication.class, …...
【Linux】进程轻松入门
目录 一, 冯* 诺依曼体系结构 1,存储结构 编辑 二, 操作系统 1,概念 2,设计OS的目的 3,定位 4,如何理解 "管理" 5, 总结 三,进程 1. 概念 那么…...
【使用时空RBF-NN进行非线性系统识别】实现了 RBF、分数 RBF 和时空 RBF 神经网络,用于非线性系统识别研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Tomcat 安装配置教程及成功后,启动失败报错解决方案
解决方案 我的报错原因是因为我的JDK是1.8的而我的Tomcat是10版本的,可能是因为版本原因吧,我重新装了Tomcat 9就可以启动成功了! 简单说下安装的时候需要注意哪些步骤吧 今天我在安装tomcat10的时候,安装成功后,启…...
C#文件操作从入门到精通(2)——查看某个dll中有哪些函数
kernel32.dll中含有ini文件操作使用的函数,我们可以通过VisualStudio自带的dumpbin.exe查看dll所包含的函数,操作步骤如下: 1、找到dumpbin.exe所在的文件夹 我的电脑中安装了VisualStudio2019社区版以及VisualStudio2017Professional,但是我发现VisualStudio2019社区版中…...
二分查找算法(全网最详细代码演示)
二分查找也称 半查找(Binary Search),它时一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字 有序 排列。 注意:使用二分查找的前提是 该数组是有序的。 在实际开…...
draw up a plan
爱情是美好的,却不是唯一的。爱情只是属于个人化的感情。 推荐一篇关于爱情的美文: 在一个小镇上,有一家以制作精美巧克力而闻名的手工巧克力店,名叫“甜蜜之爱”。这家巧克力店是由一位名叫艾玛的年轻女性经营的,她对…...
抖音seo源码开发源代码开发技术分享
一、 抖音SEO源码开发,需要掌握以下技术: 抖音API接口:抖音提供了丰富的API接口,包括用户信息、视频信息、评论信息等。 数据爬取技术:通过抓包分析抖音接口的数据结构,可以使用Python等编程语言编写爬虫程…...
网站前置审批专项/seo搜索优化是什么
字符串的转置,反转,逆序 String s1"1a2b3c"; String s2s1.reverse();//即s2"c3b2a1"如上,可以说s2是s1的转置,反转,逆序。 不严谨的可以认为三个词是同一个意思,在各大算法书中&#…...
网站服务器配置单/各大网站收录提交入口
方法一、使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未找到,该方法适用于shell命令不需要输出内容的场…...
ainihejian wordpress/著名的网络营销案例
试验网站#1搜索引擎优化收录情况记录(断续运行)日期Yahoogooglebaidusogou每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量每日收录每日收录增量2007-6-24288 333 1060 4813 2007-6-25164013523330108020481302007-6-26空间超过6月流量限制……,…...
乐清市规划图高清/天津seo网络营销
在$_REQUEST[where] $where;$storeQuery->process_views($currentModule);上面加入以下代码,下面的代码指默认为查询本月if($where){ $date_period thismonth; $date_from get_date_from($date_period); $date_to get_date_to($date_period); if(isset($date_from) &…...
上海城乡建设中级职称报名网站/厦门seo起梦网络科技
树莓派通过继电器控制水泵硬件要求继电器的工作原理接线方式代码编写硬件要求 树莓派4b、一个1路5V继电器、一个12V小水泵、一个能装四个五号电池的电池盒和四个五号电池、一个面包板和若干杜邦线。 继电器的工作原理 接线方式 (电源电压可能不足,但是可以工作) …...
网站怎么做一次性链接/中山360推广
什么是MIME TypeMIME Type是用于描述文件的类型的一种表述方法,其将文件划分为多种类型,方便对其进行统一的管理。MIME Type指定了文件的类型名称、描述、图标信息,同时通过与.desktop应用程序描述文件整合,指定了文件的打开方式。…...