如何在wpf中弹出子窗口时模糊父窗口
问题描述:
我想在我的WPF应用程序上实现此功能。我希望在那里出现弹出窗口(子窗口)的整个屏幕(父窗口)变暗的叠加/背景,因此它将使弹出窗口(子窗口)更具可见性就像下面的图像一样。这是一个浏览器弹出窗口。然后当弹出窗口(子窗口)关闭时,黑暗的叠加/背景被删除。 如何在wpf中弹出子窗口时模糊父窗口
答
在推出你的对话框,修改父窗口的效果属性:
parentWindow.Effect = new BlurEffect();
当对话框关闭:
parentWindow.Effect = null;
为了增加颜色的叠加,你可以工作在层(为了简单起见,我将使用代码隐藏方法;如果您有时间,则使用MVVM /行为):
XAML:
<Window x:Class="WpfApp3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp3"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="Grid">
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Label>Label</Label>
<TextBox Grid.Row="1"></TextBox>
<Button Click="ButtonBase_OnClick">Click</Button>
</Grid>
<Border x:Name="Splash" Grid.RowSpan="4" Opacity=".2" Visibility="Collapsed" Background="Black">
</Border>
</Grid>
</Window>
代码:
using System.Windows;
using System.Windows.Media.Effects;
namespace WpfApp3
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
Grid.Effect = new BlurEffect();
Splash.Visibility = Visibility.Visible;
var dlg = new Window();
dlg.ShowDialog();
Splash.Visibility = Visibility.Collapsed;
Grid.Effect = null;
}
}
}
+0
感谢您的回应。有没有办法给模糊添加颜色?它只是模糊了这个元素。 –
+0
已更新示例以显示彩色分层。 – Eric
这个工作非常适合我。 '窗口darkwindow =新窗口() { 背景= Brushes.Black, 不透明度= 0.8, AllowsTransparency =真, WindowStyle = WindowStyle.None, 的WindowState = WindowState.Maximized, 最顶层=真 }; darkwindow.Show(); un.ShowDialog(); darkwindow.Close();' –