c#转换器获取指定的强制转换无效

Mar*_*all 1 c# wpf

我想在我的自定义控件上简单地做一些数学运算.我需要取一个"宽度"值并将其除以转换器参数.

这是绑定:

<Border x:Name="circleBorder"
     Grid.Row="0"
     CornerRadius="{Binding Path=ActualWidth, ElementName=circleGrid}"
     Width="{Binding Path=ActualWidth, ElementName=circleGrid}"
     Height="{Binding Path=ActualWidth, ElementName=circleGrid}"
     BorderBrush="White"
     BorderThickness="{Binding Converter={StaticResource CalculateBorder}, Path=Width, ElementName=circleBorder, ConverterParameter=30}">
Run Code Online (Sandbox Code Playgroud)

这是转换器,它应该做一些简单的数学运算.

public class CalculateBorder : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {   
        return ((double)value / (double)parameter);
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误return ((double)value / (double)parameter);:

指定演员表无效.

Jen*_*ens 7

问题是无法取消装箱,parameter因为在这种情况下parameter是一个string.

解决方案是将参数转换为Convert类的double

var yourDouble = Convert.ToDouble(parameter);
Run Code Online (Sandbox Code Playgroud)

上面代码的问题Convert是定义为你的Convert方法IValueConverter.因此,您需要指定更清晰的命名空间.该System班是在System.Convert命名空间.所以你应该把它指定为:

var yourDouble = System.Convert.ToDouble(parameter);
Run Code Online (Sandbox Code Playgroud)

向编译器明确表示要使用BorderThickness该类


此外,该物业Thickness有类型Thickness.所以你应该返回一个double对象引用而不是一个parameter.