WPF中打开模态对话框时,灰色主窗口

3
当从主窗口打开模态对话框时,我希望用灰色覆盖主窗口。在WPF中,是否有标准解决方案来模拟此效果?
以下是一个例子:

2
一个值得注意的解决方案:https://wpftoolkit.codeplex.com/wikipage?title=ChildWindow - Guttsy
不错的Guttsy,这是免费的扩展WPF工具包,不是吗? - MrScf
是的,有免费的社区版,还有一个付费版本,其中包含了额外的控件。 - Guttsy
2个回答

8

这方面没有内置功能,但实现起来应该很容易。

在您的主窗口中,您需要一个网格(Grid)作为顶级容器,它没有定义列或行,因此只是一个占据所有客户端区域的单个单元格。Grid的第一个子元素是一个UserControl,实现了应用程序的所有常规内容。第二个子元素只是一个带有半透明灰色前景的矩形(Rectangle)。将其可见性与主窗口上的适当属性或应用程序DataContext的ViewModel的属性进行数据绑定。

每当显示模态对话框时,设置适当的属性以显示矩形,当移除模态对话框时,将该属性重置为false。您可以添加一个从Window继承的基类,自动执行此操作,然后从该基类派生出所有实际的对话框。


你是对的,Phil。我可以尝试实现那个功能。我想要确定没有内置的功能可以实现那个。但是你的方法听起来很合理。谢谢。 - MrScf
惊人的解决方案! - Mladen Ristic

1

和所有的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>

这将全屏打开,并用灰色蒙版覆盖原始应用程序。对话框的内容将显示在一个带有白色背景的居中网格中。

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