2010-07-12 26 views
0

我打算使用WPF日曆控件來顯示會計月/年。當我將控件的DisplayMode設置爲「Year」時,月(對於我的en-CA文化)顯示爲「Jan」,「Feb」等。我想將它們顯示爲「01」,「02」等,但無法找到一種方法來做到這一點。爲WPF日曆CalendarItems定製日期格式

回答

1

從反射鏡,CalendarItem.SetYearModeMonthButtons()方法有這樣的代碼:

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使用DateTimeFormatInfo.AbbreviatedMonthNames並從FrameworkElement.Language返回XmlLanguage獲取CultureInfo的,我不認爲有一種方法創建自定義XmlLanguage來僞造月份名稱。

所以你唯一的選擇似乎是更改CalendarButton的控件模板。你可以做這樣的事情:

<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> 

這也將影響到今年的按鈕,這所有的一切都會顯示「01」(因爲它們都代表1月1日),和並不突出的當月,但它應該給你一個開始,如果你想採取這種做法。