You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XAML中修改Calendar控件的星期显示名称?

修改WPF Calendar控件星期名称的解决方案

方法一:通过DataTrigger匹配替换文本

直接在DayTitleTemplateResourceKey对应的DataTemplate中,给TextBlock添加DataTrigger,根据默认绑定的星期文本替换为自定义名称。将原DataTemplate替换为以下代码:

<DataTemplate x:Key="{x:Static CalendarItem.DayTitleTemplateResourceKey}">
    <TextBlock Foreground="#FF333333"
               FontWeight="Bold"
               FontSize="9.5"
               FontFamily="Verdana"
               Margin="0,6,0,6"
               HorizontalAlignment="Center"
               VerticalAlignment="Center">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Setter Property="Text" Value="{Binding}" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding}" Value="Sun">
                        <Setter Property="Text" Value="周日" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding}" Value="Mon">
                        <Setter Property="Text" Value="周一" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding}" Value="Tue">
                        <Setter Property="Text" Value="周二" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding}" Value="Wed">
                        <Setter Property="Text" Value="周三" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding}" Value="Thu">
                        <Setter Property="Text" Value="周四" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding}" Value="Fri">
                        <Setter Property="Text" Value="周五" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding}" Value="Sat">
                        <Setter Property="Text" Value="周六" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
</DataTemplate>

方法二:使用值转换器实现灵活转换

如果需要支持多语言或更复杂的转换逻辑,可创建值转换器类:

1. 编写转换器代码

using System;
using System.Globalization;
using System.Windows.Data;

public class WeekDayConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var dayText = value as string;
        return dayText switch
        {
            "Sun" => "周日",
            "Mon" => "周一",
            "Tue" => "周二",
            "Wed" => "周三",
            "Thu" => "周四",
            "Fri" => "周五",
            "Sat" => "周六",
            _ => value
        };
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

2. 在XAML中引用转换器

在Window/UserControl的资源节点中添加转换器实例:

<Window.Resources>
    <local:WeekDayConverter x:Key="WeekDayConverter" />
</Window.Resources>

3. 修改DataTemplate的绑定

<DataTemplate x:Key="{x:Static CalendarItem.DayTitleTemplateResourceKey}">
    <TextBlock Foreground="#FF333333"
               FontWeight="Bold"
               FontSize="9.5"
               FontFamily="Verdana"
               Margin="0,6,0,6"
               Text="{Binding Converter={StaticResource WeekDayConverter}}"
               HorizontalAlignment="Center"
               VerticalAlignment="Center" />
</DataTemplate>

关键注意事项

  • 确保Calendar控件已应用修改后的样式:
    <Calendar CalendarItemStyle="{StaticResource CalendarItemStyle}" />
    
  • 默认星期文本依赖系统文化,若系统为非英文环境,需调整DataTrigger中的Value值匹配系统默认文本。

内容的提问来源于stack exchange,提问作者Flax Mine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:25:58