在wpf中由drawcontext绘制的几何体上的阴影

时间:2013-08-17 07:57:19

标签: wpf drawingcontext

我使用以下代码使用绘图上下文在文本框上渲染矩形。

            drawingContext.DrawRoundedRectangle(
                new SolidColorBrush(Color.FromRgb(255, 246, 178)), null,
                new Rect(new Point(rect.TopRight.X + 20, rect.TopRight.Y),
                         new Size(130, rect.Height)),
                         3,
                         3);

我想在我在WPF中以编程方式绘制的矩形上渲染阴影。我该怎么办?

1 个答案:

答案 0 :(得分:1)

向Visual

添加效果

尝试这样的事情

public class MyControl: Control
{
    private Rect rect = new Rect(100, 100, 200, 200);

    protected override void OnRender(DrawingContext drawingContext)
    {
        var r = new Rect(new Point(rect.TopRight.X + 20, rect.TopRight.Y),
                         new Size(130, rect.Height));
        var brush = new SolidColorBrush(Color.FromRgb(255, 246, 178));

        DropShadowEffect effect = new DropShadowEffect();
        effect = new DropShadowEffect {Color = Colors.Gainsboro, Direction = 30};
        this.Effect = effect;

        drawingContext.DrawRoundedRectangle(brush, null, r, 3, 3);
        base.OnRender(drawingContext);
    }

}

这给了我:

enter image description here

修改

如果你没有UI元素来附加效果,那么你需要自己做影子。 只需在主要部分下方添加另一个矩形,使用一些变为透明的渐变画笔。

 protected override void OnRender(DrawingContext drawingContext)
    {
        var r = new Rect(new Point(rect.TopRight.X + 20, rect.TopRight.Y),
                         new Size(130, rect.Height));
        var r2 = new Rect(new Point(rect.TopRight.X + 25, rect.TopRight.Y+5),
                         new Size(130, rect.Height));

        var brush = new SolidColorBrush(Color.FromRgb(255, 246, 178));

        var gradientBrush = new LinearGradientBrush(Colors.Black, Colors.Gray, 30);

        drawingContext.DrawRoundedRectangle(gradientBrush, null, r2, 3, 3);
        drawingContext.DrawRoundedRectangle(brush, null, r, 3, 3);

        base.OnRender(drawingContext);
    }

这会给你这样的东西

enter image description here