首页 > 编程语言 >Prism源码分析--IDialogService

Prism源码分析--IDialogService

时间:2023-04-04 15:59:49浏览次数:38  
标签:对话框 -- 视图 Prism 外壳 窗体 UserControl 方法 源码

1,首先看下接口提供了哪些方法

 

2,逻辑的实现类是DialogService,业务逻辑层一般使用方法如下

 

 

 

3,上面使用的方法实际上是IDialogService的一个扩展方法,扩展方法调用了实现类中的Show方法

 

 

 

4,Show方法内又调用了ShowDialogInternal

 

 

 

5,ShowDialogInternal方法内部分了四步,第一步创建空白的窗体,第二步配置空白窗体的事件,第三步是配置空白窗体的内容视图以及视图对应的VM,第四步显示出对话框。下面先从第一步开始分析,

 

 

 根据别名从容器中取出对话框的外壳,别名一般都是空,也就是取出prism自带的默认外壳(如下图),这是一个标准的window窗体

 

 

 当然如果觉得这外壳不满意,可以自己定义。自定义有2中方式,第一种是在usercontrol中设置外壳的样式,第二种是自定义一个窗体视图,实现IDialogWindow接口,并且注入到容器中。

第一种:

 

 

 第二种:

首先创建一个视图View,重写控件模板

 

 

 注意:视图类要实现IDialogWindow接口

 

 

 

 

 

6,第二步,对话框外壳窗体配置事件,这里没啥好说的,看下图

 

 

 

7,第三步,配置对话框的内容

 

 

 首先从容器中取出UserControl,这个是我们之前注入进去的

 

重点在这个方法,window是对话框的外壳,dialogContent是我们设计的UserControl,viewModel是UserControl的VM

 

 

 

 

  var windowStyle = Dialog.GetWindowStyle(dialogContent); 这句话是从UserControl中取出对话框的外壳样式,就是下图中框出的部分

然后将UserControl的VM,赋值给外壳窗体的DataContext

最后是设置对话框窗体的父窗体,默认弹出位置是相对这个父窗体的中心

 

8,第四步,打开对话框窗体

标签:对话框,--,视图,Prism,外壳,窗体,UserControl,方法,源码
From: https://www.cnblogs.com/zfsn2021/p/17286670.html

相关文章

  • cos 更换证书
    cos对象存储更换证书1、申请下载证书  2、绑定对于cos资源链接     3、绑定证书若已有证书过期,可通过解绑证书在绑定证书解决问题 ......
  • 选择列表中的列 ...... 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
    在用SQLserver对表中的数据进行查询的过程中,出现如下错误:消息8120,级别16,状态1,第27行选择列表中的列'......'无效,因为该列没有包含在聚合函数或GROUPBY子句中。其目的是因为select语句中包含聚合函数,因为聚合函数是对一组值进行操作,所以它通常与select语句的......
  • Python3内置函数之O系列
    1、object()object()是Python的内置函数之一,它返回一个新的object对象。这个对象没有任何特殊的属性或方法,它是所有类的基类,即所有Python类都直接或间接地继承自object类。如果您在Python中定义一个新的类,并且没有明确指定继承哪个类,那么该类将自动成为object类的子类。......
  • 3-springcloud整体架构及调用举例
    SpringCloud的整体架构  ServiceProvider:暴露服务的服务提供方。ServiceConsumer:调用远程服务的服务消费方。EureKaServer:服务注册中心和服务发现中心。   ......
  • flask3
    1蓝图的使用#blueprint翻译过来称之为蓝图#作用是:之前全在一个py中写flask项目,后期肯定要划分目录#不用蓝图,划分目录 no_blueprint_flask#项目名src#核心源码位置__init__.py#包里面实例化得到了app对象,models.......
  • NestJS 拦截器 和 RxJs
    为什么要介绍RxJs因为在Nestjs已经内置了RxJs无需安装并且Nestjs也会有一些基于Rxjs提供的APIRxJs是什么RxJs使用的是观察者模式,用来编写异步队列和事件处理。Observable可观察的物件Subscription监听ObservableOperators纯函数可以处理管道的数据如mapfil......
  • CAD更改线宽后没有变化效果怎么办?
    CAD更改线宽后没有变化效果怎么办?在我们调整CAD图纸样条线线宽的过程中,有可能会遇到更改CAD线宽没反应的情况,这种不显示的情况要怎么解决呢?本期,就和一起看看CAD更改线宽后不显示变化的原因和解决方法吧!CAD更改线宽后没有变化效果怎么办?CAD更改线宽后没反应的原因是因为CAD......
  • 拷贝构造函数
    c++primerp440 1.拷贝构造函数第一个参数是自身类型的引用,并且几乎总是const的。 2.拷贝构造函数通常不应该是explcit显示的......
  • flask项目结构参考与g对象
    flask项目结构参考与g对象flask本身是一个轻量化的框架,如果选择flask做项目,大部分时候,可能并不是打算运行特别庞大的项目,因此flask项目的结构并没有特别统一的规范,这篇文章仅作参考。flask蓝图蓝图——blueprint蓝图的基本使用fromflaskimportFlask,Blueprintapp=Fla......
  • 利用bat文件在命令行进行代理切换
    命令行里,用python也好,用scoop也好,用git也好,总是需要用代理搞一下。看到有篇博客写了一个简单的函数,用来做命令行的开关,于是我也仿着人家写了一个bat,用来做cmd的代理开关。其中遇到了一些小坑,稍微趟了一下,哎,可能powershell就没这么多破事了吧。批处理的语法实在是太原始了,脑壳......