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

时间:2014-12-04 07:46:57

标签: c# wpf datepicker

这里我使用了没有任何样式或控件模板的WPF日期选择器。当我去上个月回到同一个月时,我看到其他一天是启用状态。而且我还尝试了msdn的其他一些控制模板,但问题仍然存在。我附上截图供参考。工具使用VS2010

重现步骤:

1.今天日期'4'在12月份突出显示。

2.回到十月月并回到十二月,你可以看到'8'是启用状态,然后它处于禁用状态。

enter image description here

1 个答案:

答案 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}" />