我有一个无边界且最大化的窗口。我想给这个无边框窗口添加阴影。我使用了几种方法,比如在窗口中添加一个Border
。它确实添加了阴影,但当窗口最大化时,它只是使窗口变小并添加阴影。
我想要的是:
- 当窗口最大化时,阴影不可见
- 最小化时,阴影可见
这是我使用的一个代码:
<Border Margin="10">
<Border.Effect>
<DropShadowEffect Color="Black"
Direction="270"
BlurRadius="10"
ShadowDepth="3" />
</Border.Effect>
<Grid Background="White" />
</Border>
当你最大化窗口时,它不会变小。Window
包含Border
和阴影,所以你认为更小的只是窗口内边界的Margin
。
您可以创建一个带有触发器的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>