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
最后是设置对话框窗体的父窗体,默认弹出位置是相对这个父窗体的中心