【发布时间】:2014-12-04 07:46:57
【问题描述】:
这里我使用了没有任何样式或控件模板的 WPF 日期选择器。当我去上个月并回到同月时,我看到前几天处于启用状态。我还尝试了msdn 的其他一些控制模板,但问题仍然存在。这里我附上截图以供参考。使用的工具 VS2010
复制步骤:
1.Today 日期“4”在 12 月突出显示。
2.回到10月再回到12月,你可以看到'8'是启用状态,然后是禁用状态。
【问题讨论】:
标签: c# wpf datepicker
这里我使用了没有任何样式或控件模板的 WPF 日期选择器。当我去上个月并回到同月时,我看到前几天处于启用状态。我还尝试了msdn 的其他一些控制模板,但问题仍然存在。这里我附上截图以供参考。使用的工具 VS2010
复制步骤:
1.Today 日期“4”在 12 月突出显示。
2.回到10月再回到12月,你可以看到'8'是启用状态,然后是禁用状态。
【问题讨论】:
标签: c# wpf datepicker
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}" />
【讨论】: