我计划使用WPF日历控件来显示会计月/年。当我将控件的DisplayMode设置为“Year”时,月份(对于我的en-CA文化)显示为“Jan”,“Feb”等。我想将它们显示为“01”,“02”,等,但找不到办法做到这一点。
答案 0 :(得分:1)
从Reflector,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日),并且不会突出显示当前月份,但是如果您想要获取该按钮,它应该会给您一个开始做法。