沿圆形路径创建渐变画笔

我需要沿圆形路径创建一个多步梯度,如下图所示:

车轮渐变

有没有人对如何在XAML而不是代码中实现这一点有任何想法? 是否可以使用现有的渐变画笔或以某种方式合成它们来实现这种效果?

您可以通过使用非仿射变换(例如透视变换)来获得交叉径向效果。 我使用了Charles Petzold撰​​写的这篇文章中的想法:

  • 2D中的非仿射变换?

创建一个具有交叉径向梯度的仅XAML环形区域。 这是标记:

    0        90        180        270                                                              

这是视觉效果:

在此处输入图像描述

该效果使用数据源集合,其项目具有两个属性,角度和画笔。 它为每个象限使用不同的画笔绘制四个象限(向上,向右,向下和向左)。 然后用不透明蒙板将整个物体夹在环形区域。

在GDI + / Winforms中,您可以使用PathGradientBrush执行此操作:

http://www.bobpowell.net/pgb.htm

http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.pathgradientbrush.aspx

不幸的是,在WPF中没有对PathGradientBrush的支持,但是有些人在这里要求它:

http://dotnet.uservoice.com/forums/40583-wpf-feature-suggestions/suggestions/480949-add-a-pathgradientbrush-like-in-winforms-

(也许值得投票!)

由于缺乏支持,您不能直接在XAML中执行,但您可以使用GDI +代码创建图像,然后在XAML中使用该图像。 这可能比使用非仿射变换提供更好的性能。

看看Shazzam你可以写一个渲染这个渐变的像素着色器。

我认为从长远来看,这比组合线性渐变更容易。 另一种选择是简单地绘制位图并使用它。