如何在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
相关产品推荐
相关产品推荐

