在XAML中打开子窗口时,将效果应用于所有者窗口

时间:2011-11-03 00:03:25

标签: wpf xaml wpf-controls

如何在XAML中打开子窗口时应用模糊效果?

当我在后面的代码中设置子窗口的所有者时,我正在应用此效果,但我正在寻找一种方法将其应用于XAML。有什么可以实现这个吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

一种简单的方法是在样式中捕获对IsActive属性的更改。弹出子窗口时,父窗口将被停用:

<Window.Style>
    <Style TargetType="Window">
        <Style.Triggers>
            <Trigger Property="IsActive" Value="False">
                <Setter Property="Effect">
                    <Setter.Value>
                        <BlurEffect Radius="5" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Style>

这种方法的缺点是当您从应用程序切换时,窗口也会被停用。如果这对你来说是一个问题,那么你最好坚持在弹出对话框时在代码隐藏中应用效果的想法。

答案 1 :(得分:0)

对于接受的答案,设计时间的一个小改进是MultiTrigger。这样就可以找到一个在运行时始终为true的属性检查,但在设计时始终为false。例如,没有很好地记录的ToolTip属性。

<Window.Style>
    <Style TargetType="Window">
        <Style.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsActive" Value="False" />
                    <Condition Property="ToolTip" Value="A Tooltip"/>
                </MultiTrigger.Conditions>
                <Setter Property="Effect">
                    <Setter.Value>
                        <BlurEffect/> 
                    </Setter.Value>
                </Setter>
            </MultiTrigger>          
        </Style.Triggers>
    </Style>
</Window.Style>