自定义对话框窗口棱镜

3
我已经按照WPF的新IDialogService这个问题所示实现了新的DialogService。
然而,这并没有解释如何编辑对话框窗口本身,因为NotificationDialog是一个UserControl
我试过将其改为Window,但由于不是根Window而引发异常。
有任何想法如何更改对话框的Window吗?
由于Title和Icon在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个回答

10
对于其他人寻找此功能的用户 - 可以使用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" />

将会隐藏标题栏。


我怎样才能将窗口宿主布局更改为在BusyIndicator中包装用户控件内容呢? - Furqan Safdar
@FurqanSafdar 我不确定我理解你的意思,而且我已经有一段时间没有使用WPF了,你最好提出一个新问题。 - Indivara

1

有什么方法可以更改对话框的窗口吗?

代码中看,似乎您需要实现IDialogWindow并覆盖默认注册到内置实现。

此外,您不需要继承DialogViewModelBase,只需实现IDialogAware即可。


是的,创建一个实现了IDialogWindow接口的DialogWindow已经成功了!谢谢。 - Albert Alonso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接