Je prévois d'utiliser un contrôle de calendrier WPF pour afficher mois/années fiscales. Quand je mets le DisplayMode du contrôle à "Year", les mois (pour ma culture en-CA) sont affichés comme "Jan", "Feb", etc. Je voudrais les afficher comme "01", "02", etc, mais ne peut pas trouver un moyen de le faire.Format de date personnalisé pour WPF Calendar CalendarItems
Répondre
De réflecteur, la méthode CalendarItem.SetYearModeMonthButtons() a le code comme ceci:
CalendarButton childButton = child as CalendarButton;
DateTime day = new DateTime(this.DisplayDate.Year, count + 1, 1);
childButton.DataContext = day;
childButton.SetContentInternal(DateTimeHelper.ToAbbreviatedMonthString(new DateTime?(day), DateTimeHelper.GetCulture(this)));
childButton.Visibility = Visibility.Visible;
ToAbbreviatedMonthString utilise DateTimeFormatInfo.AbbreviatedMonthNames et obtient le CultureInfo du XmlLanguage retourné par FrameworkElement.Language, et je ne pense pas qu'il y ait un moyen pour créer un XmlLanguage personnalisé pour truquer les noms des mois.
Donc, votre seule option semble être de changer le modèle de contrôle pour le CalendarButton. Vous pouvez faire quelque chose comme ceci:
<toolkit:Calendar DisplayMode="Year">
<toolkit:Calendar.CalendarButtonStyle>
<Style TargetType="primitives:CalendarButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="primitives:CalendarButton">
<primitives:CalendarButton>
<TextBlock Text="{Binding Month, StringFormat=00}"/>
</primitives:CalendarButton>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</toolkit:Calendar.CalendarButtonStyle>
</toolkit:Calendar>
Cela aura également une incidence sur les boutons de l'année, qui va maintenant tout spectacle « 01 » (car ils représentent tous le 1er Janvier), et ne met pas en évidence le mois en cours, mais il devrait vous donner un début si vous voulez adopter cette approche.