在 WPF 中打开模态对话框时灰色主 window

Gray main window when open modal dialog in WPF

当从主 window 打开模态对话框时,我想用灰色覆盖主 window。 WPF中是否有标准方案来模拟这种效果?

举个例子:

此功能没有内置功能,但应该很容易实现。

在您的主 window 中,您需要一个没有定义的列或行的顶层网格,因此它只是一个占据所有客户区的单元格。 Grid 的第一个 child 是一个 UserControl,它实现了应用程序的所有正常内容。第二个 child 只是一个带有 semi-transparent 灰色前景的矩形。将其可见性数据与主 window 上的适当 属性 或作为应用程序 DataContext 的 ViewModel 的 属性 绑定。

无论何时显示模态对话框,您都会设置适当的 属性 以显示矩形,当模态对话框被移除时,它会将 属性 重置回 false。您可以添加一个继承自 Window 的基础 class,它会自动执行此操作,然后从该基础 class.

派生所有实际对话

与所有 XAML 一样,有一百万种给这只猫剥皮的方法,但这里有一个例子:

Dialog.xaml:

<Window 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" 
        WindowStyle="None"
        AllowsTransparency="True"
        WindowStartupLocation="CenterOwner" 
        WindowState="Maximized"
        Background="#33000000">

    <Grid Width="323" Height="200" VerticalAlignment="Center" HorizontalAlignment="Center" Background="#FFFFFF">
        <!-- grid things go here -->
    </Grid>
</Window>

这将打开全屏,并用灰色蒙版覆盖原始应用程序。对话框的内容将位于白色背景的居中网格中。