WPF投影

Pet*_*zah 32 wpf dropshadow

目前我在WPF中制作了一个包含网格和其他控件的边框.我面临的问题是,每当我将Border.Effect属性设置为投影效果时,边框中包含的每个控件现在都有一个投影.有没有办法将阴影设置为边框而不是边框​​中包含的每个控件?

以下是我的代码的简短示例:

<Grid>
 <Border Margin="68,67,60,67" BorderBrush="Black" BorderThickness="1" CornerRadius="10">
  <Border.Effect>
   <DropShadowEffect/>
  </Border.Effect>
  <Rectangle Fill="White" Stroke="Black" Margin="37,89,118,98" />
 </Border>
</Grid>
Run Code Online (Sandbox Code Playgroud)

Bra*_*ham 44

两种选择:

选项1:添加一个带有效果的边框元素作为您拥有的边框/矩形元素树的兄弟.像这样的东西:

<Grid>
    <Border Margin="68,67,60,67"
            BorderBrush="Black"
            BorderThickness="1"
            CornerRadius="10">
        <Border.Effect>
            <DropShadowEffect />
        </Border.Effect>
    </Border>
    <Border Margin="68,67,60,67"
            BorderBrush="Black"
            BorderThickness="1"
            CornerRadius="10">

        <Rectangle Fill="White"
                   Stroke="Black"
                   Margin="37,89,118,98">
        </Rectangle>
    </Border>

</Grid>
Run Code Online (Sandbox Code Playgroud)

选项2:将矩形作为border元素的兄弟,如下所示:

   <Grid>
    <Border Margin="68,67,60,67"
            BorderBrush="Black"
            BorderThickness="1"
            CornerRadius="10">
        <Border.Effect>
            <DropShadowEffect />
        </Border.Effect>
    </Border>
    <Rectangle Fill="White"
               Stroke="Black"
               Margin="37,89,118,98">
    </Rectangle>

</Grid>
Run Code Online (Sandbox Code Playgroud)

注意:您必须在第二个解决方案上调整布局,以使矩形在您想要的位置排成一行

  • 如果你在Grid面板中添加了一些其他内容(而不是矩形),设置Grid面板的Background属性以避免整个内容获得drop-shadow.例如,'<Grid Background ="White"> <Grid.Effect> ...... </ Grid.Effect> <TextBlock Text ="Test ...."Grid.Row ="1"/>. ...... </ Grid>' (3认同)