如何在 WPF 中为无边框 window 添加阴影
How to add a dropshadow to a borderless window in WPF
我有一个 window 是无边框且最大化的。我想给这个无边框的window加上阴影。我使用了几种方法,比如将 Border
添加到 window。它确实添加了阴影,但是当 window 最大化时,它只是使 window 变小并为其添加阴影。
我想要的是:
- 当window最大化时,阴影不可见
- 最小化时,阴影可见
这是我使用的代码:
<Border Margin="10">
<Border.Effect>
<DropShadowEffect Color="Black"
Direction="270"
BlurRadius="10"
ShadowDepth="3" />
</Border.Effect>
<Grid Background="White" />
</Border>
window 最大化后不会变小。 Window
包含Border
以及drop-shadow,所以你认为较小的只是边框的Margin
在 window.
里面
您可以创建一个带有触发器的 Style
来检查父 Window
的 Maximized
状态。
<Style x:Key="BorderWindowStyle" TargetType="{x:Type Border}">
<Setter Property="Margin" Value="10"/>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="Black"
Direction="270"
BlurRadius="10"
ShadowDepth="3" />
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="Maximized">
<Setter Property="Margin" Value="0"/>
<Setter Property="Effect" Value="{x:Null}"/>
</DataTrigger>
</Style.Triggers>
</Style>
从您的 Border
中删除已在样式中设置的属性并引用该样式。
<Border Style="{StaticResource BorderWindowStyle}">
<Grid Background="White" />
</Border>
我有一个 window 是无边框且最大化的。我想给这个无边框的window加上阴影。我使用了几种方法,比如将 Border
添加到 window。它确实添加了阴影,但是当 window 最大化时,它只是使 window 变小并为其添加阴影。
我想要的是:
- 当window最大化时,阴影不可见
- 最小化时,阴影可见
这是我使用的代码:
<Border Margin="10">
<Border.Effect>
<DropShadowEffect Color="Black"
Direction="270"
BlurRadius="10"
ShadowDepth="3" />
</Border.Effect>
<Grid Background="White" />
</Border>
window 最大化后不会变小。 Window
包含Border
以及drop-shadow,所以你认为较小的只是边框的Margin
在 window.
您可以创建一个带有触发器的 Style
来检查父 Window
的 Maximized
状态。
<Style x:Key="BorderWindowStyle" TargetType="{x:Type Border}">
<Setter Property="Margin" Value="10"/>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="Black"
Direction="270"
BlurRadius="10"
ShadowDepth="3" />
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="Maximized">
<Setter Property="Margin" Value="0"/>
<Setter Property="Effect" Value="{x:Null}"/>
</DataTrigger>
</Style.Triggers>
</Style>
从您的 Border
中删除已在样式中设置的属性并引用该样式。
<Border Style="{StaticResource BorderWindowStyle}">
<Grid Background="White" />
</Border>