具有轻微透明度的Rectangle上的DropShadowEffect - 如何使阴影不显示在填充内?

时间:2011-11-02 20:06:53

标签: c# wpf

我在Rectangle上有一个DropShadowEffect,其填充略微透明。问题是,阴影也显示在填充内部,这是我想要的。无论如何要解决这个问题?我试过了this,但它对我不起作用:/

1 个答案:

答案 0 :(得分:2)

这非常棘手。

好的,我不知道确切的答案。但是,这将给你几乎所需的效果。试试吧。

这是一个带黄色背景的示例Grid。我在它上画了两个100x100尺寸的交叉矩形。您可能需要根据需要自定义尺寸。一个矩形是灰色矩形(显示阴影),另一个是红色矩形(要显示的实际半透明矩形)。阴影深度在这里被硬编码为5个像素。请在以下位置自定义:

  • RectangleGeometry Rect =“5,5,100,100”

  • RectangleGeometry Rect =“0,0,95,95”

因此,网格看起来像:

<Grid Background="Yellow">
    <!-- A rectangle for shadow -->
    <Rectangle Fill="Gray" Width="100" Height="100" Opacity=".7">
        <Rectangle.Clip>
            <CombinedGeometry GeometryCombineMode="Exclude">
                <CombinedGeometry.Geometry1>
                    <RectangleGeometry Rect="5,5,100,100"/>
                </CombinedGeometry.Geometry1>
                <CombinedGeometry.Geometry2>
                    <RectangleGeometry Rect="0,0,95,95"/>
                </CombinedGeometry.Geometry2>
            </CombinedGeometry>
        </Rectangle.Clip>
        <Rectangle.Effect>
            <!-- For nice soft shadow effect -->
            <BlurEffect Radius="5" />
        </Rectangle.Effect>
    </Rectangle>

    <!-- Actual rectangle which is translucent -->
    <Rectangle Fill="Red" Width="100" Height="100" Opacity=".6" >
        <Rectangle.Clip>
            <RectangleGeometry Rect="0,0,95,95"/>
        </Rectangle.Clip>
    </Rectangle>
</Grid>

更新(11-Nov-11):

您可以通过将它们绑定到父级的宽度和高度来替换硬编码的宽度和高度。检查此SO topic以获取您需要的多个绑定。关于约束的更多研究材料:here

XAML代码段的外观示例如下:

<Rectangle Width="{Binding RelativeSource={RelativeSource Self}, Path=Parent.ActualWidth}"
        Height="{Binding RelativeSource={RelativeSource Self}, Path=Parent.ActualHeight}">
</Rectangle>

由于我不是数据绑定方面的专家,您需要从这里自行研究。我觉得你需要自己的值转换器来分配特殊宽度的广告高度(ActualWidth - ShadowDepth种东西(ShadowDepth这里是5像素)。)