WPF:日期时间选择器选取问题

3
我在没有任何样式或控件模板的情况下使用了WPF日期选择器。当我回到上个月并回到同一个月时,我发现有些其他日期处于启用状态。我尝试了来自msdn的一些其他控件模板,但问题仍然存在。这里附上了参考截图。使用的工具为VS2010。
重现步骤:
1.今天的日期为12月份中的“4”。
2.返回到10月份,然后再回到12月份,您可以看到“8”在之前处于禁用状态,现在处于启用状态。

enter image description here

1个回答

2
问题存在于CalendarDayButton的默认样式中。(您可以通过右键单击WPF Designer并选择“编辑其他模板-> CalendarDayButtonStyle”来获取它)此样式中有一个名为ActiveStates的VisualStateGroup。如果您查看Active状态,它是空的。
<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>

因此,当您将月份更改为之前的日期并返回时,先前用于今天日期的日期槽必须将其状态从今天状态更改为活动状态。由于活动状态为空,前景属性将回退到直接应用于元素的颜色(黑色)。
<ContentPresenter x:Name="NormalText"
                TextElement.Foreground="#FF333333"
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                Margin="5,1,5,1"
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />

这是原因,即使它是下个月,该特定插槽看起来也很暗。现在的解决方法是将有效的故事板添加到“Active”状态(目标为暗色),而不是将其留空。并将应用于ContentPresenter的默认前景色更改为浅色。现在它会正常工作。我提供了下载链接以获取无错误样式。
下载日历按钮样式:Download CalendarDayButtonStyle
<Calendar CalendarDayButtonStyle="{DynamicResource CalendarDayButtonStyle}" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接