获取指定强制转换的c#转换器无效
我试图简单地对我的自定义控件进行一些计算。我需要取一个“宽度”值,然后除以转换器参数 以下是装订:获取指定强制转换的c#转换器无效,c#,wpf,C#,Wpf,我试图简单地对我的自定义控件进行一些计算。我需要取一个“宽度”值,然后除以转换器参数 以下是装订: <Border x:Name="circleBorder" Grid.Row="0" CornerRadius="{Binding Path=ActualWidth, ElementName=circleGrid}" Width="{Binding Path=ActualWidth, ElementName=circleGrid}" Height="{
<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}">
我在返回((double)值/(double)参数时得到这个错误代码>:
指定的强制转换无效
您必须返回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
转换器参数值
给出了厚度
类的对象
,因此您需要对其进行转换以匹配您的逻辑
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。此属性没有默认值。必须返回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
转换器参数值
给出了厚度
类的对象
,因此您需要对其进行转换以匹配您的逻辑
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。此属性没有默认值。问题是无法取消装箱参数
,因为在这种情况下参数
是字符串
解决方案是将参数与类一起转换为double
上述代码的问题在于Convert
被定义为IValueConverter
的Convert
方法。因此,您需要通过添加System
来指定完整的名称空间。完整表达式如下所示:
var yourDouble = System.Convert.ToDouble(parameter);
向编译器明确说明您要使用System.Convert
类
此外,属性BorderThickness
的类型为Thickness
。因此,您应该返回一个Thickness
对象引用,而不是double
问题在于无法取消对参数的装箱,因为在这种情况下参数
是一个字符串
解决方案是将参数与类一起转换为double
上述代码的问题在于Convert
被定义为IValueConverter
的Convert
方法。因此,您需要通过添加System
来指定完整的名称空间。完整表达式如下所示:
var yourDouble = System.Convert.ToDouble(parameter);
向编译器明确说明您要使用System.Convert
类
此外,属性BorderThickness
的类型为Thickness
。因此,您应该返回一个Thickness
对象引用,而不是double
对象参数是一个字符串
返回((双精度)值/Convert.ToDouble(参数));
对象参数是一个字符串
返回((双精度)值/Convert.ToDouble(参数));
听起来好像您的参数
或值
实际上可能不是双精度的。尝试使用Convert.ToDouble()
而不是直接强制转换,因为它可以正确处理更多情况。向我们展示什么是CalculateOrder。这是这里缺失的关键信息。证明这一点的最佳方法:不要在Convert
方法中使用参数,只需将(double)value
除以2.2。在询问之前,您应该调试这些内容。进行转换时,值
和参数
中有什么?在转换器上放置一个断点,查看值是否为NaN。听起来好像您的参数
或值
实际上可能不是一个双精度值。尝试使用Convert.ToDouble()
而不是直接强制转换,因为它可以正确处理更多情况。向我们展示什么是CalculateOrder。这是这里缺失的关键信息。证明这一点的最佳方法:不要在Convert
方法中使用参数,只需将(double)value
除以2.2。在询问之前,您应该调试这些内容。进行转换时,value
和parameter
中有什么内容?在转换器上放置一个断点,查看值是否不在第一个post上方。是否尝试返回厚度?装订接缝要正确。我做了您建议的更改,这是相同的错误返回新厚度((双)值/(双)参数)代码>您的解决方案指向了实现的另一个问题,但原始错误是由我的回答中提到的cast(double)参数
中的cast错误引起的。请参阅上面的第一篇文章。您是否尝试返回厚度?装订接缝要正确。我做了您建议的更改,这是相同的错误返回新厚度((双)值/(双)参数)
您的解决方案指向了实现的另一个问题,但原始错误是由cast(double)参数
引起的cast错误,如我在回答中所述