在WPF的视觉层上绘制一个对象,应用发光效果

本文关键字:应用 一个对象 绘制 WPF 视觉 | 更新日期: 2023-09-27 18:04:17

我使用以下代码在Visual Layer上绘制Rectangle对象。我想知道是否有一种方法可以将Glow效果应用到这些Rectangles上?既然有很多,有没有办法将效果应用到父容器?

DrawingContext.DrawRectangle(Brushes.Red, new Pen(), new Rect(New Point(0,0), new Size (10,10));

Update(可能是这个问题的答案)

我正在使用这个代码:

var dropShadowEffect = new DropShadowEffect
{
    ShadowDepth = 0,
    Color = Colors.Lime,
    Opacity = 1,
    BlurRadius = 100
};
ColumnsLayer.Effect = dropShadowEffect;

在WPF的视觉层上绘制一个对象,应用发光效果

除非您没有提到的特殊需求,否则可能没有技术理由在c#中执行这些操作。下面是一个XAML解决方案,使用路径标记语法绘制图形。

居中投影效果没有足够的视觉冲击力来引起注意;你需要让发光区域超出图形的边缘。如果你想重现Android特有的蓝色辉光效果,你可以做两个辉光路径,一个是重模糊,另一个是1或2像素的模糊半径和部分不透明度。

<Canvas>
    <!-- Offset the whole thing so you can see the whole glow. -->
    <Canvas.RenderTransform>
        <TranslateTransform X="20" Y="20" />
    </Canvas.RenderTransform>
    <!-- You could also have a PathGeometry MyShape property on your 
         ViewModel and bind to that.
    -->
    <Canvas.Resources>
        <PathGeometry x:Key="MyShape">M 0,0 L 10,0 10,10 0,10 Z</PathGeometry>
    </Canvas.Resources>
    <!-- Glow path -->
    <Path Data="{StaticResource MyShape}"
          StrokeThickness="4"
          Stroke="Lime"
          Fill="Lime"
          >
        <Path.Effect>
            <BlurEffect Radius="6"/>
        </Path.Effect>
    </Path>
    <!-- Figure path -->
    <Path Data="{StaticResource MyShape}"
          StrokeThickness="0"
          Fill="Red"
          >
    </Path>
</Canvas>

如果在c#中手动绘制视觉层是绝对必要的,那么上面的东西可以用这种方式复制而不会有太多麻烦,除了你不能直接在ColumnsLayer上做所有的事情,因为你需要将一些没有效果的东西覆盖在一些有模糊效果的东西上面。