这方面没有内置功能,但实现起来应该很容易。
在您的主窗口中,您需要一个网格(Grid)作为顶级容器,它没有定义列或行,因此只是一个占据所有客户端区域的单个单元格。Grid的第一个子元素是一个UserControl,实现了应用程序的所有常规内容。第二个子元素只是一个带有半透明灰色前景的矩形(Rectangle)。将其可见性与主窗口上的适当属性或应用程序DataContext的ViewModel的属性进行数据绑定。
每当显示模态对话框时,设置适当的属性以显示矩形,当移除模态对话框时,将该属性重置为false。您可以添加一个从Window继承的基类,自动执行此操作,然后从该基类派生出所有实际的对话框。
和所有的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>