基本用法
1、添加一个用户控件(作为弹出窗口的内容)—>进行注册RegisterDialog
2、添加对应的ViewModel—>实现IDialogAware接口
3、通过注入的IDialogService方法Show/ShowDialog打开弹窗
详细用法
1、添加一个用户控件(作为弹出窗口的内容)
2、通过RegisterDialog注册窗体
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterDialog<UserEditView>();
}
3、ViewModel实现IDialogAware接口
public class UserEditViewModel : IDialogAware
{
public string Title => "信息编辑";
public event Action<IDialogResult> RequestClose;
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
public void OnDialogOpened(IDialogParameters parameters)
{
}
}
4、通过IDialogService接口 Show/ShowDialog 方法调用对话框,通过注册时候的名称进行打开, 并且可以传递参数, 以及回调方法(主要用于返回对话框的返回结果)
OpenDialogCommand = new DelegateCommand(() =>
{
DialogParameters param = new DialogParameters();
// View的注册名称 - 参数键值对 - 弹窗回调 - 指定弹出窗口的注册名称
dialogService.ShowDialog("UserEditView", param,
(result) =>
{
});
});
弹窗设置样式
通过Dialog.WindowStyle在UserControl中直接设置样式
<UserControl x:Class="SysModule.Views.UserEditView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SysModule.Views"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<prism:Dialog.WindowStyle>
<Style TargetType="Window">
<Setter Property="WindowStyle" Value="None"/>
<Setter Property="Width" Value="500"/>
<Setter Property="Height" Value="300"/>
<Setter Property="SizeToContent" Value="Manual"/>
</Style>
</prism:Dialog.WindowStyle>
<Grid >
<TextBlock Text="UserEdit" FontSize="30"/>
</Grid>
</UserControl>
自定义弹窗的样式,可全局使用
1、首先需要添加一个Windows窗体,WindowStartupLocation="CenterOwner"可将窗体弹出在父窗体中间
<Window x:Class="Shell.DialogWindow"
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:local="clr-namespace:Shell"
mc:Ignorable="d" WindowStartupLocation="CenterOwner"
Title="自定义弹窗" Height="350" Width="500">
<Grid>
</Grid>
</Window>
2、窗体后台代码中继承IDialogWindow接口
/// <summary>
/// DialogWindow.xaml 的交互逻辑
/// </summary>
public partial class DialogWindow : Window, IDialogWindow
{
public DialogWindow()
{
InitializeComponent();
}
public IDialogResult Result { get; set; }
}
3、将Windows窗体在App中进行全局注册,如果注册时为DialogWindow指定别名为"DialogWindow",那么通过IDialogService打开窗体时需指定窗体的名称
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
//未指定名称
containerRegistry.RegisterDialogWindow<DialogWindow>();
//指定了名称为"DialogWindow"
//containerRegistry.RegisterDialogWindow<DialogWindow>("DialogWindow");
}
OpenDialogCommand = new DelegateCommand(() =>
{
DialogParameters param = new DialogParameters();
// View的注册名称 - 参数键值对 - 弹窗回调 - 指定弹出窗口的注册名称
dialogService.ShowDialog("UserEditView", param,
(result) =>
{
},"DialogWindow");
});