这里我使用了没有任何样式或控件模板的WPF日期选择器。当我去上个月回到同一个月时,我看到其他一天是启用状态。而且我还尝试了msdn的其他一些控制模板,但问题仍然存在。我附上截图供参考。工具使用VS2010
重现步骤:
1.今天日期'4'在12月份突出显示。
2.回到十月月并回到十二月,你可以看到'8'是启用状态,然后它处于禁用状态。
答案 0 :(得分:2)
CalendarDayButton的默认样式中存在问题。 (您可以通过右键单击WPF Designer并选择“编辑其他模板” - >“CalendarDayButtonStyle”来获取它。此样式中有一个名为 ActiveStates 的VisualStateGroup。如果您查看有效状态,则为空。
<VisualStateGroup x:Name="ActiveStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Active" />
<VisualState x:Name="Inactive">
<Storyboard>
<ColorAnimation Duration="0"
To="#FF777777"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="NormalText" />
</Storyboard>
</VisualState>
</VisualStateGroup>
因此,当您将月份更改为之前并返回时,之前处理“今日”日期的日期位置必须将其状态从今天状态更改为活动州。由于活动状态为空,Foreground属性将回退到直接应用于元素的那个,即深色(黑色)。
<ContentPresenter x:Name="NormalText"
TextElement.Foreground="#FF333333"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="5,1,5,1"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
这就是原因,特定的插槽看起来很暗,即使是下个月。现在解决方案是将有效的故事板添加到活动状态(目标为深色),而不是将其留空。并将应用于ContentPresenter的默认前景色更改为浅色。现在它会很好用。我提供了下载链接以获得无错误的样式。
Download CalendarDayButtonStyle
<Calendar CalendarDayButtonStyle="{DynamicResource CalendarDayButtonStyle}" />