Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net “双”字;1/3“;as转换器参数_.net_Wpf_Xaml_Converter - Fatal编程技术网

.net “双”字;1/3“;as转换器参数

.net “双”字;1/3“;as转换器参数,.net,wpf,xaml,converter,.net,Wpf,Xaml,Converter,我必须使用转换器和参数将双精度转换为其他值: 这是我的XAML存根: Converter={StaticResource ToOtherDoubleConverter}, ConverterParameter=-1/2 这是转换器: [ValueConversion(typeof(double), typeof(double))] public class DoubleToOtherDoubleConverter : IValueConverter { public object Co

我必须使用转换器和参数将双精度转换为其他值:

这是我的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());
    }
现在,说这是文化依赖是没有用的,等等

有没有一种方法可以将double“硬编码”为double? 因为上述变体可以用不同的方式书写,例如:

ConverterParameter=-1/2
ConverterParameter=-0.5
ConverterParameter=-0,5
etc.
或者也

double.Parse(parameter.ToString());
(double)parameter;
等等

还有一个问题:

如何以浮动格式指定
1/3
?差不多

ConverterParameter=0.333333333333333333333333333333333333333333333333333333

不幸的是,IValueConverter接口提供了接受对象(不是类型保存)而不是泛型的方法。
但是您可以将Culture.InvariantCulture添加到解析中并引发异常。这样,您就可以通知用户“不正确”的格式。

试试这个

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

您确定它是作为数值传入的吗?根据我的经验,大多数XAML值最终都会以字符串的形式传递,即使它们看起来像数字…@Dan Puzey:as
object
。。。作为字符串,也许最后,这就是我问的原因,因为我不知道:)如果您在转换器的第一行上放置断点,您可以检查
value.GetType()
,并查看它被传递为什么…@Dan:have reason:
parameter.GetType(){Name=“String”FullName=“System.String”}System.Type{System.RuntimeType}
你不能。1/3不是一个数字,它是一个算术表达式。出于您的目的,我将创建两个转换器->乘法器转换器和除法器转换器。您也可以反转逻辑并创建一个除法器转换器,但这会使您的xaml更具可读性…:)最后,这是我不喜欢的“硬”变体。但因为这是唯一对我有效的方法,我别无选择。我在最后添加了CultureInfo.InvariantCulture。