我必须使用转换器和参数将其转换为double:
这是我的XAML存根:
Converter={StaticResource ToOtherDoubleConverter}, ConverterParameter=-1/2
这是转换器:
[ValueConversion(typeof(double), typeof(double))]
public class DoubleToOtherDoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
return (double)value * double.Parse(parameter.ToString());
}
现在,说这是依赖于文化的等等是没有用的。
有没有办法“硬编码”双重被识别为双? 因为上述变体可以用不同的方式编写,例如:
ConverterParameter=-1/2
ConverterParameter=-0.5
ConverterParameter=-0,5
etc.
或
double.Parse(parameter.ToString());
(double)parameter;
等...
还有一个问题:
如何以浮动格式指定 1/3
?
ConverterParameter=0.333333333333333333333333333333333333333333333333333333
答案 0 :(得分:1)
不幸的是,IValueConverter接口提供了接受对象的方法 - 不是类型保存 - 而不是泛型。
但是你可以在你的解析中添加一个Culture.InvariantCulture并抛出异常。这样您就会通知用户“不正确”的格式。
答案 1 :(得分:0)
试试这个
public class DoubleToOtherDoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
var frac = ((string) parameter).Split('/');
if (frac.Length == 2)
return (double) value*double.Parse
(frac[0])/double.Parse(frac[1]);
return (double) value* double.Parse(((string) parameter)
.Replace(",", "."));
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}