【问题标题】:Customize Dialog window prism自定义对话框窗口棱镜
【发布时间】:2019-07-01 17:35:03
【问题描述】:

我已经实现了新的 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);
}

但它并没有按预期工作。

【问题讨论】:

    标签: c# wpf mvvm prism


    【解决方案1】:

    对于搜索此内容的其他人 - 可以使用 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" />
    

    将隐藏标题栏。

    【讨论】:

      【解决方案2】:

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

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

      另外,您不需要从DialogViewModelBase 继承,只需实现IDialogAware 就足够了。

      【讨论】:

      • 是的,创建一个实现IDialogWindowDialogWindow 已经奏效了!谢谢。
      猜你喜欢
      • 2017-01-31
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      相关资源
      最近更新 更多