2011-01-04 4 views
1

У меня есть считывание позиции, это очень просто - это просто TextBlock со стилем, применяемым к нему. В этом стиле, я просто установить его как так (есть больше свойств, чем это, но я взял их за сжатости):Заполнение числового дисплея в WPF

<Style x:Key="NumberStyle" TargetType="{x:Type TextBlock}"> 
     <Setter Property="TextAlignment" Value="Center" /> 
    </Style> 

Теперь у меня есть один дисплей, который использует этот стиль, и он будет отображать число от 0.0 до 30000.0. Проблема в том, что, поскольку я сосредоточен на тексте, число (если быстро меняется) прыгает повсюду, и это немного беспокоит. Я хотел бы отформатировать мою строку, чтобы она не делала этого.

Я попробовал этот ConverterParameter в XAML:

ConverterParameter='\{0:00000.0\}' 

и в то время как он делает отступы правильно, я буду получать номера, как 00032.5. Затем я заменил 0 на #, но это заканчивается тем же, что и {0:0.0}. Я посмотрел на MSDN docs и не увидел ничего другого, что могло бы помочь.

Единственное, что я могу придумать, это то, что мне пришлось бы написать новый IValueConverter для этого. Другими словами, в методе Convert() мне нужно было бы принять parameter и проанализировать его для моего собственного специального символа. И затем, когда я это обнаружу, замените недостающие числа пробелами.

Однако, что я действительно пытаюсь узнать здесь, можно ли это сделать, просто используя другой символ в строке формата, о которой я не знаю?

ответ

1

Попробуйте {}{0,10:#,0} для поля из 10 символов.

Обратите внимание, что это даст нечетные результаты, если шрифт не является фиксированным. Я попробовал его в Kaxaml, и он работает, но текст не соответствует пропорциональному шрифту.

+0

не уверен, для чего предназначен {} впереди? Я предполагаю, что это опечатка, так как это создает ошибку компилятора ... – Dave

+4

Он ускользает от параметра формата в расширении разметки WPF Binding, где символ '{' начинает новое расширение разметки. Я думал, вы используете его в расширении разметки; если нет, просто удалите их. – codekaizen

3

Я думаю, вам нужно что-то вроде {0,7} (отображение аргумента на семи позициях, заполнение влево с пробелами). Однако даже в этом случае для того, чтобы текст не прыгал, вам нужно использовать моноширинный шрифт или, по крайней мере, шрифт с шириной символа пробела, равным ширине цифр.

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