WPF - 具有百分比值的 StrokeDashArray

WPF - StrokeDashArray with percentage values

使用WPF时,可以使用StrokeDashArray="1,10,5,5"等方式绘制StrokeDashArrays

但是,我在椭圆形状上使用 StrokeDashArray-属性,我不想在绘制此椭圆时计算所有双精度值。

是否可以以某种方式使用百分比值?
StrokeDashArray="10%, 50%, 25%, 15%"...


编辑: 我忘了在这个上下文中附加我对 percentage 的定义:完整行的百分比。

例如:
如果您有一个半径为 100px 的 circle/ellipse,则周长为 2π * 100,值 10%2π * 100px * 0.1 = 62.8px.这62.8px应该是对应段的长度,用10%

表示

绑定到 EllipseWidth 属性 并使用转换器来计算笔划破折号数组。如果 Ellipse 不是圆圈,我不确定在那种情况下你想要发生什么...

<Ellipse StrokeDashArray="{Binding Width, RelativeSource={RelativeSource Self}, Converter={StaticResource EllipseStrokeConverter}}" Width="100" Height="100"/>

转换器:

public class EllipseStrokeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var width = (double)value;

        var strokeDashArray = new DoubleCollection();

        strokeDashArray.Add(CalculatePercentage(width, 0.1));
        strokeDashArray.Add(CalculatePercentage(width, 0.5));
        strokeDashArray.Add(CalculatePercentage(width, 0.25));
        strokeDashArray.Add(CalculatePercentage(width, 0.15));

        return strokeDashArray;
    }

    private double CalculatePercentage(double width, double percent)
    {
        return 2 * 3.14 * (width / 2) * percent;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}