2011-01-04 5 views
1

Ich habe eine Positionsanzeige, die sehr einfach ist - es ist nur ein TextBlock mit einem Style, der darauf angewendet wird. In diesem Stil, habe ich es so wie so (es mehr Eigenschaften als diese sind, aber ich habe sie für Prägnanz out):Auffüllen einer numerischen Anzeige in WPF

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

Nun, ich eine Anzeige, die diesen Stil verwendet, und es wird eine Anzeige Nummer von 0.0 bis 30000.0. Das Problem ist, dass, da ich den Text zentriere, die Nummer (wenn sie sich schnell ändert) überall herumspringt und etwas beunruhigend ist. Ich möchte meine Zeichenfolge formatieren, so dass dies nicht möglich ist.

habe ich versucht, diesen Converter in XAML:

ConverterParameter='\{0:00000.0\}' 

und während es die Polsterung richtig funktioniert, werde ich Zahlen bekommen wie 00.032,5. Ich ersetzte dann die 0 durch #, aber das verhält sich schließlich wie {0:0.0}. Ich schaute auf die MSDN docs und sah nichts anderes, das helfen würde.

Das einzige, was mir einfällt, ist, dass ich dafür einen neuen IValueConverter schreiben müsste. Mit anderen Worten, in der Convert() - Methode müsste ich parameter nehmen und es für mein eigenes Sonderzeichen analysieren. Und wenn ich dies feststelle, ersetze die fehlenden Zahlen durch Leerzeichen.

Aber was ich hier wirklich zu lernen versuche ist, kann dies getan werden, indem einfach ein anderes Zeichen in der Formatzeichenfolge verwendet wird, von der ich nichts weiß?

Antwort

1

Versuchen Sie {}{0,10:#,0} für ein Feld von 10 Zeichen.

Beachten Sie jedoch, dass dies zu ungeraden Ergebnissen führt, wenn die Schriftart nicht fest ist. Ich habe es in Kaxaml versucht, und es funktioniert, aber der Text nicht mit einer proportionalen Schriftart ausgerichtet.

+0

nicht sicher, wofür {} in Front ist? Ich nehme an, das ist ein Tippfehler, da das einen Compilerfehler erzeugt ... – Dave

+4

Es entkommt der format-Parameter in einer WPF-Binding-Markup-Erweiterung, wo das '{' - Zeichen eine neue Markup-Erweiterung beginnt. Ich dachte, du würdest es in einer Markup-Erweiterung verwenden; Wenn nicht, entferne sie einfach. – codekaizen

3

Ich denke, Sie brauchen so etwas wie {0,7} (Anzeige Argument auf sieben Positionen, Padding auf der linken Seite mit Leerzeichen). Damit der Text nicht springt, müssen Sie jedoch auch in diesem Fall eine Schriftart mit fester Schreibweise oder mindestens eine Schriftart mit der Breite des Leerzeichen, die der Breite der Ziffern entspricht, verwenden.