Hallo zusammen,
wie kann ich eine Zahl in einer TextBox als Hexadezimal-Wert ausgeben?
<TextBox Text="{Binding Path=meineZahl}" Name="TxtBox_MeineZahl" />
Ist "meineZahl" = 10 (Dezimal), so soll in der TextBox "0xA" stehen...
Habe was von "StringFormat" gelesen, aber ich finde einfach nichts passendes...
Danke
Rahul
meinst du die formatierung direkt in der xaml oder geht auch in c# ?
in c# waere das einfach string.Format("{0:X}", value);
das Binding hat eine Eigenschaft StringFormat da kannst du die Formatierung vornehmen:
<TextBox Text="{Binding Path=meineZahl,StringFormat={}{0:X}}" Name="TxtBox_MeineZahl" />
Wobei das {} am Anfang nur in XAML nötig wenn gleich am Anfang ein Parameter kommt um den Compiler davon abzuhalten das {0:X} so ähnlich wie {Binding} oder {StaticResource} zu parsen.
Wobei das {} am Anfang nur in XAML nötig wenn gleich am Anfang ein Parameter kommt um den Compiler davon abzuhalten das {0:X} so ähnlich wie {Binding} oder {StaticResource} zu parsen.
Alternativ kannst du das auch "escapen":
<TextBox Text="{Binding meineZahl, StringFormat=\{0:X\}}"/>
mfg
SeeQuark
Danke erstmal für die schnellen Antworten!
Also ich bräuchte das direk in XAML.
<TextBox Text="{Binding Path=meineZahl,StringFormat={}{0:X}}" Name="TxtBox_MeineZahl" />
geht bei mir nicht, er unterlegt er mir "}" hinter dem "X" blau, als ToolTipp kommt dann "}"
<TextBox Text="{Binding meineZahl, StringFormat=\{0:X\}}"/>
habe ich dann auch ausprobiert, jedoch bekomm ich dann folgende Fehlermeldung:
Eine Ausnahme (erste Chance) des Typs "System.Windows.Markup.XamlParseException" ist in PresentationFramework.dll aufgetreten.
Zusätzliche Informationen: Cannot find DependencyProperty or PropertyInfo for property named 'StringFormat'. Property names are case sensitive. Error at object 'System.Windows.Data.Binding' in markup file...
Vergessen zu erwähnen:
"meineZahl" ist vom typ "int", also kein string...
Das geht erst ab WPF mit .NET 3.5.
Falls es daran liegt, wäre ein Umstieg ratsam, da die Geschwindigkeit der WPF-Apps um bis zu 30% erhöht wird und andere Sachen dazu gekommen sind.
EDIT: Achso, bei meinem XAML-Code fehlt noch der "ElementName".
mfg
SeeQuark
Das geht erst ab WPF mit .NET 3.5.
Mein Zielframework ist das .NET Framework 3.5, so steht es zumindest unter "Projekteigenschaften->Anwendung->Zielframework"
Also nutze ich doch die WPF 3.5, oder?
Sonst noch irgend eine Idee an was das liegen könnte?
Hi,
du könntest mal testen, ob folgendes bei dir funktioniert:
<Label Content="{Binding Path=meineZahl}" ContentStringFormat="{}{0:f2}"></Label>
Dieses verwende ich in meinem Projekt.
Du müsstest für dich dann noch das f2 anpassen...
Viele Grüße
Jens
Nicht zu fassen:
Ich habe das Projekt gerade lokal auf meinem Entwicklungsrechner laufen lassen, da scheint es zu funktionieren:
<TextBox Text="{Binding Path=meineZahl,StringFormat={}{0:X}}" Name="MeinName"/>
ergibt bei "meineZahl" = 10(dezimal) --> "A"
Wenn ich das ganze per Remote-Debugging laufen lasse bekomme ich obige Fehlermeldung.
Wie kann ich es erreichen, dass ich nicht nur "A", sondern "0xA" bekomme?
Sollte das nicht schon so sein? (wegen {0:X})
Wie finde ich herraus welche .net Version auf meiner Remote-Machine ist?
Edit:
Ich denke StringFormat, bzw. ContenStringFormat ist erst ab .net 3.5 SP1 verfügbar, das würde meine Situation erklären...
- Wie kann ich es erreichen, dass ich nicht nur "A", sondern "0xA" bekomme?
Sollte das nicht schon so sein? (wegen {0:X})
{0:X} macht aus 10 -> A
Wenn du jetzt 0xA haben willst setz doch einfach 0x davor:
StringFormat=0x{0:X}
Ich denke StringFormat, bzw. ContenStringFormat ist erst ab .net 3.5 SP1 verfügbar, das würde meine Situation erklären...
Stimmt, das wollte ich sagen 🤔.
Am Besten mal in die :rtfm: MSDN schauen: BindingBase.StringFormat-Eigenschaft
.NET Framework
Unterstützt in: 3.5 SP1, 3.0 SP1
- Wie kann ich es erreichen, dass ich nicht nur "A", sondern "0xA" bekomme?
Sollte das nicht schon so sein? (wegen {0:X})
Der Parameter entspricht exakt der string.Format
-Methode.
Daher einfach: ":::{style="color: darkred;"}StringFormat){darkred}=0x\{0:X\}
".
EDIT: Ein bisschen nach Lector, dafür richtig escaped 😄
mfg
SeeQuark
Ich krame das Thema noch mal raus da es dazu passt.
Mit dem oben erwähnten StringFormat klappt das alles bei mir so lange gut, bis der Anwender den kompletten Text der Textbox löscht oder eine inkompatible Eingabe macht. Dann fliegt eine FormatException, die Eingabezeichenfolge habe das falsche Format. Die Exception fliegt (logischerweise), bevor der Setter des Bindings aufgerufen wurde, ein Breakpoint im Setter des gebundenen Properties wird nicht angesprungen (wenn die Exception fliegt, steht die Anwendung in einer while(continueLoop)-Schleife in der Microsoft-Application.cs).
Gibt es eine Möglichkeit, diese Exception zu behandlen, oder muss man an dieser Stelle auf die Formatierung im XAML verzichten und es im Code lösen (z.B. mit einem Konverter).
gruß & danke
sth_Weird
Linux is for free...if your time is worth nothing
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht
++++++++++++++++++++~+