在 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>
这将打开全屏,并用灰色蒙版覆盖原始应用程序。对话框的内容将位于白色背景的居中网格中。
当从主 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>
这将打开全屏,并用灰色蒙版覆盖原始应用程序。对话框的内容将位于白色背景的居中网格中。