【问题标题】:How to add a dropshadow to a borderless window in WPF如何在 WPF 中向无边框窗口添加阴影
【发布时间】:2020-09-02 11:52:07
【问题描述】:

我有一个无边界且最大化的窗口。我想给这个无边框窗口添加一个阴影。我使用了几种方法,例如在窗口中添加Border。它确实添加了阴影,但是当窗口最大化时,它只是使窗口变小并为其添加阴影。

我想要的是:

  • 窗口最大化时,阴影不可见
  • 最小化时,阴影可见

这是我使用的代码:

<Border Margin="10">
    <Border.Effect>
        <DropShadowEffect Color="Black"
                          Direction="270"
                          BlurRadius="10"
                          ShadowDepth="3" />
    </Border.Effect>
    <Grid Background="White" />
</Border>

【问题讨论】:

    标签: c# wpf xaml window


    【解决方案1】:

    最大化时窗口不会变小。 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>
    

    【讨论】:

    • 非常感谢,它制作了白色背景,但我将窗口设置为透明并添加了一个白色背景的网格。
    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多