自定义对话框窗口棱镜

时间:2019-07-01 17:35:03

标签: c# wpf mvvm prism

我已经实现了新的DialogService,如本期所示 A New IDialogService for WPF

但是,由于NotificationDialogUserControl,因此并不能解释如何编辑对话框窗口。

我尝试将其更改为Window,但是由于不是根窗口,因此引发了异常。

知道如何更改对话框的窗口吗?

由于在DialogViewModelBase中设置了标题和图标,因此我也尝试添加一个ResizeMode属性。

DialogViewModelBase中:

private ResizeMode _resizeMode;
public ResizeMode ResizeMode
{
   get => _resizeMode;
   set => SetProperty(ref _resizeMode, value);
}

以及在NotificationDialogViewModel实现中:

public NotificationDialogViewModel()
{
    Title = "Notification";
    ResizeMode = System.Windows.ResizeMode.CanMinimize;
    CloseDialogCommand = new DelegateCommand(CloseDialog);
}

但是它没有按预期工作。

2 个答案:

答案 0 :(得分:2)

对于其他搜索此样式的人-可以使用prism:Dialog.WindowStyle设置样式。

示例来自 https://github.com/PrismLibrary/Prism/blob/master/Sandbox/Wpf/HelloWorld/HelloWorld/Dialogs/NotificationDialog.xaml

新链接:https://prismlibrary.com/docs/wpf/dialog-service.html#style-the-dialogwindow

<UserControl x:Class="HelloWorld.Dialogs.NotificationDialog"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:prism="http://prismlibrary.com/"
             prism:ViewModelLocator.AutoWireViewModel="True"
             Width="300" Height="150">

    <prism:Dialog.WindowStyle>
        <Style TargetType="Window">
            <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
            <Setter Property="ResizeMode" Value="NoResize"/>
            <Setter Property="ShowInTaskbar" Value="False"/>
            <Setter Property="SizeToContent" Value="WidthAndHeight"/>
        </Style>
    </prism:Dialog.WindowStyle>

    <Grid x:Name="LayoutRoot" Margin="5">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <TextBlock Text="{Binding Message}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" TextWrapping="Wrap" />
        <Button Command="{Binding CloseDialogCommand}" CommandParameter="True" Content="OK" Width="75" Height="25" HorizontalAlignment="Right" Margin="0,10,0,0" Grid.Row="1" IsDefault="True" />
    </Grid>
</UserControl>

还可以使用Setter设置其他属性。例如,

<Setter Property="WindowStyle" Value="None" />

将隐藏标题栏。

答案 1 :(得分:1)

  

任何想法如何更改对话框的窗口?

看看code,看来您必须实现IDialogWindow并将默认注册覆盖到内置实现中。

此外,您无需继承DialogViewModelBase,只需实现IDialogAware就可以了。