我试图在我的自定义控件上简单地做一些数学运算。我需要采取"宽度"值并将其除以转换器参数。
这是绑定:
<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);
上收到此错误:
指定的演员表无效。
答案 0 :(得分:7)
问题是无法取消装箱parameter
,因为在这种情况下parameter
是string
。
解决方案是使用Convert
类
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
提供object
类Thickness
,因此您需要将其转换为符合您的逻辑。
<强> 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));