WPF如何修改Calendar控件节假日日期的CalendarDayButton前景色
问题原因
WPF 内置的CalendarDayButton默认控件模板中,对不同交互状态(普通状态、选中、鼠标悬停、禁用等)的Foreground属性做了硬编码的触发器设置,这些模板触发器的样式优先级高于你在自定义Style中直接设置的TextElement.Foreground属性;而FontSize没有被默认模板的触发器覆盖,所以能正常生效。
解决方法
你可以直接在自定义样式中补充对应状态的触发器,覆盖默认模板的Foreground设置,示例修改后的样式如下:
<Style x:Key="calendarDayButtonStyle" TargetType="{x:Type CalendarDayButton}"> <Setter Property="TextElement.FontSize" Value="20"/> <!-- 普通状态前景色 --> <Setter Property="Foreground" Value="Green"/> <Style.Triggers> <!-- 覆盖鼠标悬停状态前景色 --> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Foreground" Value="Green"/> </Trigger> <!-- 覆盖选中状态前景色 --> <Trigger Property="IsSelected" Value="True"> <Setter Property="Foreground" Value="Green"/> </Trigger> <!-- 覆盖非当月日期的前景色,可按需调整颜色 --> <Trigger Property="IsInactive" Value="True"> <Setter Property="Foreground" Value="LightGreen"/> </Trigger> <!-- 你原来的节假日高亮触发器,可单独设置节假日前景色 --> <DataTrigger Binding="{Binding Converter={StaticResource HolidayDaysConverter}}" Value="True"> <Setter Property="Background" Value="Red"/> <Setter Property="Foreground" Value="White"/> </DataTrigger> </Style.Triggers> </Style>
如果上述触发器覆盖不能满足自定义需求,你也可以完全重写CalendarDayButton的控件模板,自定义所有状态的外观,彻底摆脱默认模板的限制。
内容的提问来源于stack exchange,提问作者SullenMan
相关产品推荐
相关产品推荐

