【问题标题】:WPF: DateTime Picker Selection IssueWPF:日期时间选择器选择问题
【发布时间】:2014-12-04 07:46:57
【问题描述】:

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

复制步骤:

1.Today 日期“4”在 12 月突出显示。

2.回到10月再回到12月,你可以看到'8'是启用状态,然后是禁用状态。

【问题讨论】:

    标签: c# wpf datepicker


    【解决方案1】:

    CalendarDayButton 的默认样式存在问题。 (您可以通过右键单击 WPF Designer 并选择 Edit Additional templates->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>
    

    因此,当您将月份更改为上一个月份并返回时,以前代表今天日期的日期槽必须将其状态从 Today 状态更改为 Active状态。由于活动状态为空,因此 Foreground 属性将回退到直接应用于元素的状态,即深色(黑色)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      相关资源
      最近更新 更多