Windows phone 7 wp7-stringformat更改textblock stringformat的英制和公制

Windows phone 7 wp7-stringformat更改textblock stringformat的英制和公制,windows-phone-7,string-formatting,metric,Windows Phone 7,String Formatting,Metric,大家好,我做了一些不太好的事情,我应该说。现在,当我的应用程序处于最后阶段并接近完成时,我需要有一个设置页面,可以在其中设置度量单位是英制还是公制 我现在的问题是,我有20个文本块,它们绑定到不同的滑块上,如下所示: <TextBlock x:Name="spring" Text="Spring" /> <TextBlock Text="{Binding Path=Value, Mode=TwoWay,StringFormat='0.00 inch', ElementName=

大家好,我做了一些不太好的事情,我应该说。现在,当我的应用程序处于最后阶段并接近完成时,我需要有一个设置页面,可以在其中设置度量单位是英制还是公制

我现在的问题是,我有20个文本块,它们绑定到不同的滑块上,如下所示:

<TextBlock x:Name="spring" Text="Spring" />
<TextBlock Text="{Binding Path=Value, Mode=TwoWay,StringFormat='0.00 inch', ElementName=springslider}" Margin="300,-21,0,0" x:Name="springData" />
<Slider Name="springslider" Background="{StaticResource PhoneAccentBrush}" Maximum="1" Minimum="0" SmallChange="5" />
<TextBlock Text="{Binding Path=Value, Mode=TwoWay, Converter={StaticResource StringFormatConverter}, ElementName=springslider}" Margin="300,-21,0,0" x:Name="springData" />

在textblock文本绑定中,我将StringFormat设置为0.00英寸,如果我选择metric,我希望它将StringFormat更改为0.0毫米


有什么想法吗?

编写一个字符串转换器类,该类将接受该值并根据您设置的设置属性返回不同的值-类似于以下内容:

public class StringFormatConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (Settings.FormatSetting == FormatSettings.Metric)
            return (string)value + " mm";
        else return (string)value + " inch";
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value;
    }
}
然后将转换器添加到一个资源字典中:

<common:StringFormatConverter x:Key="StringFormatConverter" />

然后像这样绑定时使用它:

<TextBlock x:Name="spring" Text="Spring" />
<TextBlock Text="{Binding Path=Value, Mode=TwoWay,StringFormat='0.00 inch', ElementName=springslider}" Margin="300,-21,0,0" x:Name="springData" />
<Slider Name="springslider" Background="{StaticResource PhoneAccentBrush}" Maximum="1" Minimum="0" SmallChange="5" />
<TextBlock Text="{Binding Path=Value, Mode=TwoWay, Converter={StaticResource StringFormatConverter}, ElementName=springslider}" Margin="300,-21,0,0" x:Name="springData" />


如果需要将小数点从0.0更改为0.000,该怎么办?因为1.0 mm是0.039英寸,而不是仅仅转换为字符串并附加“mm”或“inch”,所以首先将传递给转换器的值转换为双精度,然后根据所选系统(公制或英制)将其转换为特定格式(0.00或0.0000)的字符串。如果您不知道如何实现,请在Internet上搜索十进制数的字符串格式。有一个快速问题,如果(Settings.ListPickerSetting==1)返回(string)值+“mm”,为什么我不能使用此格式;如果(Settings.ListPickerSetting==2)返回(字符串)值+“英寸”;获取此错误“StringFormatConverter.Convert(object,System.Type,object,System.Globalization.CultureInfo)”:并非所有代码路径都返回值我发现此错误用于双重格式化,但无法获取如何实现此错误本身解释了问题-并非所有代码路径都返回值。使用'else',因为当您使用2'if's时,可能会发生这些都不执行的情况。