【发布时间】:2020-12-04 06:56:26
【问题描述】:
我做了一个速度表控件我的控制器有一个名为 Angle 的属性,它可以改变我的速度表的形状(180 表示完整的循环,等等...)
借助转换器,我可以正确移动速度计
// values[0] = Angle
// values[1] = Value
var startAngle = System.Convert.ToDouble(values[0]) * -1;
var endAngle = startAngle + (((double)values[1]) * 2);
return endAngle;
现在我想要一个叫Maximum的属性,如果用户把它设置为50,即使我的圆是360度,整个圆也会有50个值。
我使用了以下代码,但不幸的是它不能正常工作
return value * angle / maximum;
这也是我的弧线
<x:Arc StartAngle="{Binding Angle, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource Positive2Nagative}}" EndAngle="{Binding Angle, RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
更新:
这段代码:
//a = s * A / max
value * angle / maximum;
编译成这样:
<loc:speedometer Angle="120" MaximumValue="50" Value="{Binding ElementName=sld, Path=Value}"
/>
更新 2:
我修复了这段代码的问题
return ((value * angle / maximumValue * 2) - angle);
【问题讨论】:
-
@Sinatr 不,我想将值转换为具有最大属性的角度
-
这不是minimal reproducible example - 现在可以帮助您...
-
你提到 360 度和 180 度,不知何故你的起始角度是负的。你的speedo应该是什么样子的?什么角度为零,最大等于什么角度?
-
@Andy Arc Control 有 2 个属性,称为 StartAngle 和 EndAngle 如果 startAngle 为 0,endAngle 为 360,我们有一个完整的圆,如果 startAngle 为 -180,endAngle 为 180,我们有一个完整的圆如果 startAngle 为 -120,endAngle 为 120,我们也几乎是一个半圆形