2012-09-23 3 views
0

Привет всем, я сделал что-то не так хорошее, что я должен сказать. Теперь, когда мое приложение находится в завершающей стадии и почти полностью, мне нужно иметь страницу настроек, где я могу установить, должны ли единицы измерения быть имперскими или метрическими.wp7 - stringformat change imperial и metric для textblock stringformat

Проблемы я теперь в том, что у меня есть 20 TextBlock, которые связаны с различными ползунками, как это:

<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 связывающий я установил StringFormat к 0.00 inchs и если я выбрать метрическую I хотите, чтобы он изменил stringformat на 0.0 мм.

Любые идеи?

ответ

1

Написать класс строки конвертер, который будет принимать значение и возвращает вам другое значение согласно свойству настройки, которые вы установили - что-то похожее на это:

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 Text="{Binding Path=Value, Mode=TwoWay, Converter={StaticResource StringFormatConverter}, ElementName=springslider}" Margin="300,-21,0,0" x:Name="springData" /> 
+0

, что если мне нужно изменить десятичное число от 0.0 до 0.000? потому что 1.0 мм 0.039 дюймов – mogren3000

+0

Вместо того, чтобы просто преобразовать в строку и установить «мм» или «дюйм», сначала преобразовать значение, переданное конвертеру в двойное, а затем преобразовать его в строку в определенном формате (0,00 или 0,0000) в зависимости от на выбранной системе (метрической или имперской). Поиск в Интернете для форматирования строк для десятичных чисел, если вы не знаете, как это сделать. –

+0

У вас есть быстрый вопрос, почему у меня нет этого, если (Settings.ListPickerSetting == 1) return (string) value + "mm"; if (Settings.ListPickerSetting == 2) return (string) value + "inch"; получает эту ошибку «StringFormatConverter.Convert (объект, System.Type, объект, System.Globalization.CultureInfo)»: не все пути кода возвращает значение – mogren3000

Смежные вопросы