2011-10-21 4 views
3

J'ai une colonne de date dans un DataGrid dans mon application Silverlight. J'ai besoin de l'heure pour être affiché au format 24 heures. Pour ce faire, je l'ai modifié la culture de l'interface utilisateur dans l'événement Application_Startup comme ceci:Silverlight UI culture

CultureInfo cinf = Thread.CurrentThread.CurrentUICulture.Clone() as CultureInfo; 
    DateTimeFormatInfo f = cinf.DateTimeFormat.Clone() as DateTimeFormatInfo; 
    System.Globalization.DateTimeFormatInfo df = new System.Globalization.DateTimeFormatInfo(); 
    string format = "MM/dd/yyyy HH:mm:ss"; 
    f.FullDateTimePattern = format; 
    cinf.DateTimeFormat = f; 
    Thread.CurrentThread.CurrentUICulture = cinf; 

Mais l'interface reprend toujours le format DataTime spécifié dans mes paramètres régionaux sur mon OS. Des pointeurs?

Répondre

0

Essayez le réglage CurrentCulture aussi bien, qui est:

Thread.CurrentThread.CurrentCulture = cinf; 
+0

Cela vous a-t-il aidé? – andrew

+0

Oui, j'ai essayé de définir à la fois CurrentCulture et CurrentUICulture, mais toujours l'interface utilisateur avec le format 12 heures. Ce qui est intéressant est que lorsque je mets un point de rupture sur la classe du modèle de vue, le format apparaît comme format 24 heures. !!! – Avinash

0

Ne serait-il pas préférable de définir ther nécessaire mise en forme sur la liaison elle-même? Quelque chose comme: -

<sdk:DataGridTextColumn Header="SomeDate" Binding="{Binding SomeDate, StringFormat={}{0:MM/dd/yyyy HH:mm:ss}}" /> 

La raison pour laquelle votre code ne fonctionne pas est que le CultureInfo utilisé par les contrôles chargés par Xaml est défini par la propriété Language de contrôle du chargement du XAML. Je ne pense pas qu'il existe un moyen de fournir un CultureInfo personnalisé dans ce scénario.

+0

J'ai une exigence absolue que je retourne un objet DateTime, je ne peux pas utiliser un convertisseur de liaison qui renvoie une chaîne. J'ai des filtres sur chaque colonne qui dépendent du type de données de la colonne. J'ai essayé la propriété "Language" dans le XAML et la culture est reflétée en fonction de la langue que j'ai définie, mais même les paramètres de cette langue sont récupérés à partir des paramètres du système d'exploitation ... ... d'autres façons de contourner cela? ? – Avinash

+0

@avinash: Normalement, on fait un filtrage via une implémentation de 'ICollectionView', cela s'appliquerait à l'ensemble d'objets entrant avant que toute liaison ait eu lieu. En outre, je ne pense pas que 'StringFormat' s'applique à moins que la propriété target assignée ne demande un' String' (pour 'DataGridTextColumn', ce serait vrai). Peut-être a) vous devriez essayer et b) inclure plus de détails sur votre xaml et votre code si ce n'est pas le cas. – AnthonyWJones