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

How to add a dropshadow to a borderless window in WPF

我有一个 window 是无边框且最大化的。我想给这个无边框的window加上阴影。我使用了几种方法,比如将 Border 添加到 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 来检查父 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>