In WPF 3.5SP1 verwende ich die letzte Funktion StringFormat in DataBindings:
<TextBlock Text="{Binding Path=Model.SelectedNoteBook.OriginalDate, StringFormat='f'}"
FontSize="20" TextTrimming="CharacterEllipsis" />
Das Problem ist, dass das Datum immer in Englisch formatiert ist ... obwohl mein System in Französisch ist? Wie kann ich erzwingen, dass das Datum dem Systemdatum folgt?
wpf
datetime
localization
Pavel Anikhouski
quelle
quelle
Antworten:
Vom Erstellen eines internationalisierten Assistenten in WPF
quelle
Definieren Sie den folgenden XML-Namespace:
Nun sehen Sie diese fantastische Lösung:
Mir ist klar, dass dies kein globaler Fix ist und Sie ihn für jede Ihrer Bindungen benötigen, aber das ist doch nur eine gute XAML? Soweit mir bekannt ist, wird bei der nächsten Aktualisierung der Bindung die richtige
CultureInfo.CurrentCulture
oder die von Ihnen angegebene verwendet.Diese Lösung aktualisiert Ihre Bindungen sofort mit den richtigen Werten, aber es scheint viel Code für etwas so Seltenes und Unschädliches zu sein.
quelle
Ich wollte nur hinzufügen, dass die Antwort von Loraderon in den meisten Fällen großartig funktioniert. Wenn ich die folgende Codezeile in meine App.xaml.cs einfüge, werden die Daten in meinen TextBlocks in der richtigen Kultur formatiert.
Ich sage "die meisten Fälle". Zum Beispiel wird dies sofort funktionieren:
... aber wenn Sie Runs in einem TextBlock verwenden, wird die DateTime in der Standardkultur formatiert.
Damit dies funktioniert, brauchte ich Gusdors Antwort, nämlich ConverterCulture = {x: Static gl: CultureInfo.CurrentCulture} zur Bindung hinzuzufügen.
Ich hoffe, diese zusätzliche Antwort wird jemandem von Nutzen sein.
quelle
Fügen Sie einfach die Kulturverknüpfung zum Tag der obersten Ebene ein:
z.B:
quelle
DatePicker
zu bringen, ihre Arbeit zu erledigen mich schnell wieder auf dem richtigen Weg!Wie bereits erwähnt, verwendet XAML standardmäßig die invariante Kultur (en-US), die Sie verwenden können
um die Kultur auf die Standardkultur für die Sprache der aktuellen Kultur zu setzen. Aber der Kommentar ist falsch; Dies verwendet nicht die aktuelle Kultur, da Sie keine Anpassungen sehen, die der Benutzer möglicherweise vorgenommen hat. Dies ist immer die Standardeinstellung für die Sprache.
Um die aktuelle Kultur tatsächlich mit Anpassungen zu verwenden, müssen Sie die
ConverterCulture
zusammen mit derStringFormat
wie in festlegenmit dem
gl
als global definierten Namespace in Ihrem Root-Elementquelle
binding.ConverterCulture = System.Globalization.CultureInfo.CurrentCulture;
Wenn Sie die Sprache ändern müssen, während das Programm ausgeführt wird, können Sie einfach die Language-Eigenschaft Ihres Root-Elements ändern (ich bin mir nicht sicher, ob dies einen sofortigen Effekt hat oder ob das Unterelement neu erstellt werden muss, in meinem Fall funktioniert dies zumindest).
quelle
Der vollständige Code zum Umschalten der Lokalisierung auch in Elementen wie
<Run />
diesen lautet:quelle
Wenn Sie die Kulturinformationen zur Laufzeit ändern möchten, können Sie ein Verhalten verwenden (siehe unten).
quelle
Wenn Sie nicht an XAML, sondern an Code arbeiten, können Sie die ConverterCulture wie folgt festlegen:
Ein großes Lob an @KZeise für den Hinweis auf den subtilen Unterschied zwischen der Verwendung der Standardkulturdefinition und der Verwendung der benutzerdefinierten Kulturdefinition des Benutzers.
quelle
Verwenden Sie Label (einschließlich Cultture) und nicht Texblock
quelle