Prism源码分析--IDialogService

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,第四步,打开对话框窗体

posted @ 2023-04-04 15:46  追风少年2021  阅读(249)  评论(0)    收藏  举报