2015-11-20 66 views
1

我想简单地对我的自定义控件做一些数学运算。我需要取一个“宽度”值并将其分配给Converter Paramater。c#转换器获取指定的演员表无效

这里是绑定:

<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

听起来好像你的'parameter'或'value'实际上可能并不是一个双。尝试使用'Convert.ToDouble()'而不是直接转换,因为它会正确处理更多的情况。 –

+0

向我们展示CalculateBorder是什么。这是这里关键的缺失信息。最好的方法来证明这一点:不要在你的'Convert'方法中使用参数,只需将'(double)value'除以2.2。 – code4life

+0

你应该在问之前调试这些东西。当您进行转换时,“value”和“parameter”中有什么? – Will

回答

4

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

溶液转换参数与Convert

var yourDouble = Convert.ToDouble(parameter); 

上述代码的问题是,Convert被定义为您的IValueConverter的方法Convert加倍。所以你需要指定命名空间更清晰。 Convert类位于System命名空间中。所以你应该将它指定为这样:

var yourDouble = System.Convert.ToDouble(parameter); 

作出清楚,你要使用的System.Convert


而且物业BorderThickness有型Thickness编译器。所以你应该返回一个Thickness对象引用而不是double

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.Controls.Border边界宽度的System.Windows.Thickness。该属性没有默认值。

+0

这会产生相同的错误。 –

+0

这是什么错误? –

+0

查看上面的第一篇文章。 –

1

对象参数是一个字符串

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