加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 具有径向渐变的WPF径向进度条

发布时间:2020-12-15 08:31:43 所属栏目:百科 来源:网络整理
导读:在 this question and answer的帮助下,我设法创建了一个径向进度条.这实现了弧形绘制概念,其中弧线绑定到起始角度和结束角度. 我现在的问题是我希望进度条从弧的中心有径向渐变.这使得进度条从弧的内部到弧的外部具有“线性梯度”.我试图在弧的笔划上应用径
在 this question and answer的帮助下,我设法创建了一个径向进度条.这实现了弧形绘制概念,其中弧线绑定到起始角度和结束角度.

我现在的问题是我希望进度条从弧的中心有径向渐变.这使得进度条从弧的内部到弧的外部具有“线性梯度”.我试图在弧的笔划上应用径向渐变(ProgressBar的Foreground属性),但是这会在弧形笔划的中心应用径向渐变,而不是弧形对象的中心(如下所示).

当弧度为100%(或任何高于75%)时,行程的中心位于弧的中心,从而产生所需的结果.

如何始终将径向渐变的中心调整到圆弧的中心,以便在所有填充百分比下应用所需的渐变?或者是否有更好的解决方案/方法解决这个问题?

解决方法

由于您使用的RadialGradient很可能是相对的,它将根据弧的实际大小改变其中心.

当弧度为75%或更高时,Arc生成的几何体处于其最大宽度和高度,因此稳定并覆盖整个控件.

你想要做的是,绘制整个圆并掩盖“原始”弧之外的部分.在您的情况下,简单的方法是使用以下方法替换Arc.OnRender方法:

Arc.cs

protected override void OnRender(DrawingContext drawingContext)
{
    // half the width and height of the Arc
    double radiusX = RenderSize.Width / 2;
    double radiusY = RenderSize.Height / 2;

    // the outlines of the "original" Arc geometry
    PathGeometry clip = GetArcGeometry().GetWidenedPathGeometry(
        new Pen(Stroke,StrokeThickness));

    // draw only in the area of the original arc
    drawingContext.PushClip(clip);
    drawingContext.DrawEllipse(Stroke,null,new Point(radiusX,radiusY),radiusX,radiusY);
    drawingContext.Pop();
}

说明

>获取原始代码计算的未修改几何(GetArcGeometry)
>使用之前用于绘制圆弧的笔来扩展它(GetWidenedPathGeometry)
>指示DrawingContext忽略该区域之外的任何内容(Push(clip))
>使用渐变绘制整圆(DrawEllipse)
>指示DrawingContext从现在开始忽略剪辑(Pop)

结果

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读