比如说做一个类似这样的曲线界面, 可以动态添加格子, 每个格子可以调整曲线的波峰波谷。
此时可以用到PolyBezierSegment 类
即:不断的添加2个控制点和终止点。
伪代码如下:
var bezierSegment = new PolyBezierSegment();
for (int i = 0; i < periodCount - 1; i = i + 1)
{
var item1 = CurveLine.Items[i] as OffsetData;
var item2 = CurveLine.Items[i + 1] as OffsetData;
if (item1 != null && item2 != null)
{
bezierSegment.Points.Add( new Point (Math.Max(0, item1.RightControlPoint.X / 100 * width + sliderOffsetWidth), Math .Max(0, item1.RightControlPoint.Y / 100 * height - sliderOffsetHeight)));
bezierSegment.Points.Add( new Point (Math.Max(0, item2.LeftControlPoint.X / 100 * width + sliderOffsetWidth), Math .Max(0, item2.LeftControlPoint.Y / 100 * height - sliderOffsetHeight)));
bezierSegment.Points.Add( new Point (Math.Max(0, (i + 1) * width + sliderOffsetWidth), Math.Max(0, (100 - item2.Intensity) / 100.0 * height - sliderOffsetHeight)));
bezierSegment.IsStroked = true;
bezierSegment.IsSmoothJoin = true;
}
}
最后把Segment添加到PathFigure里, 然后把PathFigure添加到PathGeometry里。
备注:
曲线的颜色渐变可以通过指定Geometry的GradientStops即可。