Dans WPF 3.5SP1, j'utilise la dernière fonctionnalité StringFormat dans DataBindings:
<TextBlock Text="{Binding Path=Model.SelectedNoteBook.OriginalDate, StringFormat='f'}"
FontSize="20" TextTrimming="CharacterEllipsis" />
Le problème auquel je suis confronté est que la date est toujours formatée en anglais ... bien que mon système soit en français? Comment puis-je forcer la date à suivre la date du système?
wpf
datetime
localization
Pavel Anikhouski
la source
la source
Réponses:
À partir de la création d'un assistant internationalisé dans WPF
la source
Définissez l'espace de noms XML suivant:
Maintenant, voici ce correctif fantastique:
Je suis bien conscient que ce n'est pas un correctif global et vous en aurez besoin sur chacune de vos liaisons, mais c'est sûrement juste du bon XAML? Pour autant que je sache, la prochaine fois que la liaison sera mise à jour, elle utilisera le correct
CultureInfo.CurrentCulture
ou ce que vous avez fourni.Cette solution mettra immédiatement à jour vos liaisons avec les valeurs correctes, mais cela semble être beaucoup de code pour quelque chose d'aussi rare et inoffensif.
la source
Je voulais juste ajouter que la réponse de Loraderon fonctionne très bien dans la plupart des cas. Lorsque je mets la ligne de code suivante dans mon App.xaml.cs, les dates de mes TextBlocks sont formatées dans la culture correcte.
Je dis `` la plupart des cas '', par exemple, cela fonctionnera immédiatement:
... mais lors de l'utilisation de Run dans un TextBlock, le DateTime est formaté dans la culture par défaut.
Pour que cela fonctionne, j'avais besoin de la réponse de Gusdor , à savoir ajouter ConverterCulture = {x: Static gl: CultureInfo.CurrentCulture} à la liaison.
J'espère que cette réponse supplémentaire sera utile à quelqu'un.
la source
Insérez simplement le raccourci de culture vers la balise de niveau supérieur:
par exemple:
la source
DatePicker
pour faire son travail, donc cette solution facile a obtenu me remettre rapidement sur les rails!Comme déjà indiqué, XAML utilise par défaut la culture invariante (en-US), et vous pouvez utiliser
pour définir la culture sur la culture par défaut pour la langue de la culture actuelle. Mais le commentaire est faux; cela n'utilise pas la culture actuelle, car vous ne verrez aucune personnalisation que l'utilisateur aurait pu faire, ce sera toujours la valeur par défaut pour la langue.
Pour utiliser réellement la culture actuelle avec des personnalisations, vous devrez définir le
ConverterCulture
avec leStringFormat
, comme dansavec le
gl
défini comme un espace de noms global dans votre élément racinela source
binding.ConverterCulture = System.Globalization.CultureInfo.CurrentCulture;
Si vous avez besoin de changer la langue pendant que le programme est en cours d'exécution, vous pouvez simplement changer la propriété Language sur votre élément racine (je ne sais pas si cela a un effet instantané ou si le sous-élément doit être recréé, dans mon cas, cela fonctionne au moins)
la source
Le code complet pour basculer la localisation également dans des éléments comme celui
<Run />
-ci:la source
Si vous souhaitez modifier les informations de culture au moment de l'exécution, vous pouvez utiliser un comportement (voir ci-dessous)
la source
Si vous travaillez sur du code plutôt que sur XAML, vous pouvez définir le ConverterCulture comme suit:
Félicitations à @KZeise pour avoir souligné la différence subtile entre l'utilisation de la définition de culture par défaut et l'utilisation de la définition de culture personnalisée de l'utilisateur.
la source
Utilisez Label (y compris Cultture) et non texblock
la source