如何在WPF中为无边框窗口添加阴影



我有一个无边界且最大化的窗口。我想给这个无边框窗口添加阴影。我使用了几种方法,比如在窗口中添加一个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,该触发器用于检查父WindowMaximized状态。

<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>

相关内容

  • 没有找到相关文章

最新更新