Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Pierrick's Blog

.Net "full power"

WPF : la gestion des dates (Label, TextBlock)

Le Label et le TextBlock affichent les dates de manières différentes.

Le label utilise la Culture, et pas le Textblock (du moins pas la culture courante)

Exemple :

<TextBlock Text="binding with TextBlock"></TextBlock>
<
TextBlock Margin="10,0,0,0">
    <TextBlock.Text>
        <Binding Source="{x:Static s:DateTime.Now}">
        </Binding>
    </TextBlock.Text>
</
TextBlock>
<
TextBlock Text="Binding with Label"></TextBlock>
<
Label Margin="10,0,0,0" Padding="0">
    <Label.Content>
        <Binding Source="{x:Static s:DateTime.Now}">
        </Binding>
    </Label.Content>
</
Label>
donne :

image

et pourtant ma cullture est :

image 

mais comment fait donc le "TextBlock" pour m' afficher la date dans ce format ?

et bien tout simplement du binding....

en effet la propriété "Text" du TextBlock étant de type "string", le Binding effectue une conversion, alors que pour le Label, la propriété Content étant de type object, le binding n' effectue aucune conversion.

il reste une question, quelle est la culture utilisée pour la conversion ?

1) si la propriété "ConverterCulture" du Binding est affectée c' est cette culture qui est utilisée.

<Binding Source="{x:Static s:DateTime.Now}"
ConverterCulture="{x:Static sg:CultureInfo.CurrentUICulture}">
</
Binding>

2) Sinon c' est la propriété "Language" du l' élément (FrameworkElement.Language) qui est utilisée.

<TextBlock Margin="10,0,0,0" x:Name="tb1" Language="fr-FR">
    <TextBlock.Text>
        <Binding Source="{x:Static s:DateTime.Now}" x:Name="tbbinding">
        </Binding>
    </TextBlock.Text>
</
TextBlock>

image
très bien mais alors que vaut la propriété "Language", lorsque celle-ci n' est pas spécifiée ?

image

et oui "en-us", mon ami Reflector me le confirme...

 image

Oui mais !

il y a encore un truc qui me chiffonne..., le Label n' affiche pas les secondes !!!

Après un essai "DateTime.Now.ToString()" affiche bien les secondes et utilise la culture.

De plus le Label possède un ContentPresenter pour afficher son contenu, qui lui même à comme template par défaut un "TextBlock"

... dans les deux cas j' ai un TextBlock... mais alors pourqoi l' affichage est différent ?

hum hum, le binding ???

Oui encore lui !

le binding utilisé entre le ContentPresenter et son TextBlock interne est un "TemplateBindingExtension", qui lui par défaut cherche un TypeConverter en faisant quelque chose du style :

TypeConverter tc = TypeDescriptor.GetConverter(typeof(DateTime));
if (tc.CanConvertTo(typeof(string)))
{
   
return (string)tc.ConvertTo(DateTime.Now, typeof(string));
}

(graçe au symboles, j'ai pu parcourir le contenu des sources du ContentPresenter....)

et par défaut le DateTimeConverter effectue un .ToString(format.ShortDatePattern + " " format.ShortTimePattern)

 

à suivre...

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 21 août 2008 18:29 par pierrick

Commentaires

richardc a dit :

Les Converter n'utilisent effectivement pas les Cultures de thread (sauf si on le précise).

NB: Je continue ici ma croisade contre les var!!!

# août 22, 2008 09:40

pierrick a dit :

oui effectivement j'utilise "var" par fénéantise, mais c'est tellement pratique...

en F#, le mot clé est même absent

let rec fib x =

 match x with

   | 1 -&gt; 1

   | 2 -&gt; 1

   | x -&gt; fib(x - 1) + fib(x - 2)

;-)

# août 23, 2008 09:36
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 25 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 1 heure et 39 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le il y a 15 heures et 19 minutes

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le il y a 16 heures et 15 minutes

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le il y a 16 heures et 30 minutes

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18