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

时间:2015-11-20 17:31:41

标签: 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}">

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

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();
    }
}

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

  

指定的演员表无效。

3 个答案:

答案 0 :(得分:7)

问题是无法取消装箱parameter,因为在这种情况下parameterstring

解决方案是使用Convert

将参数转换为double
var yourDouble = Convert.ToDouble(parameter);

上述代码的问题是Convert被定义为Convert的{​​{1}}方法。因此,您需要通过添加IValueConverter来指定完整的命名空间。完整的表达式如下所示:

System

向编译器明确表示您要使用var yourDouble = System.Convert.ToDouble(parameter);

此外,属性System.Convert的类型为BorderThickness。因此,您应该返回Thickness对象引用而不是Thickness

答案 1 :(得分:2)

你必须像下面一样返回System.Windows.Thickness,

 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 {           
    return new Thickness(10,10,10,10);
 }

BorderThickness接受System.Windows.Thickness

转换器参数value提供objectThickness,因此您需要将其转换为符合您的逻辑。

<强> MSDN

public System.Windows.Thickness BorderThickness { get; set; }

System.Windows.Controls.Border

的成员

要点: 获取或设置System.Windows.Controls.Border的相对System.Windows.Thickness。

返回: System.Windows.Thickness,描述System.Windows.Controls.Border边界的宽度。此属性没有默认值。

答案 2 :(得分:2)

对象参数是字符串

return ((double)value / Convert.ToDouble(parameter));