WPF日历CalendarItems的自定义日期格式

时间:2010-07-12 17:22:30

标签: .net wpf formatting calendar

我计划使用WPF日历控件来显示会计月/年。当我将控件的DisplayMode设置为“Year”时,月份(对于我的en-CA文化)显示为“Jan”,“Feb”等。我想将它们显示为“01”,“02”,等,但找不到办法做到这一点。

1 个答案:

答案 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日),并且不会突出显示当前月份,但是如果您想要获取该按钮,它应该会给您一个开始做法。