如何使WPFToolkit DatePicker仅突出显示所选日期?

时间:2009-12-03 10:31:19

标签: wpf datepicker wpftoolkit

我使用 WPFToolkit 中的 DatePicker ,但由于当前日期和最后/第一天当月也突出显示,实际选择了哪个日期令人困惑。

除了所选日期以外,如何在日历中突出显示任何内容?

alt text http://www.deviantsart.com/upload/fhsmni.png

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你想做以下事情: 1.隐藏当前日期选择 2.当日历控件弹出时(或者我想摆脱它),在所选日期设置焦点矩形

N1很容易;你应该将DatePicker的IsTodayHighlighted属性设置为false,它将消失

N2有点棘手。可能有一种更简单的方法可以解决这个问题,但这就是为我工作的东西:DatePicker通过调用

显示后立即将焦点移动到日历控件
calendar.MoveFocus(new TraversalRequest(FocusNavigationDirection.First));

这使得焦点矩形在月的第一天显示;您可以通过强制日历将焦点移动到所选日期来修复它;下面是DatePicker控件的CalendarOpened事件处理程序(在我的例子中是datePicker1)。我正在使用反射来访问datapicker控件的私有字段_calendar并执行其私有方法FocusDate

private void datePicker1_CalendarOpened(object sender, RoutedEventArgs e)
{
    FieldInfo fieldInfo0 = datePicker1.GetType().GetField(
        "_calendar", BindingFlags.Instance | BindingFlags.NonPublic);            
    Microsoft.Windows.Controls.Calendar calendar = 
        (Microsoft.Windows.Controls.Calendar)fieldInfo0.GetValue(datePicker1);
    if (calendar != null)
    {
        MethodInfo focusDateInfo = calendar.GetType().GetMethod("FocusDate", BindingFlags.Instance | BindingFlags.NonPublic);
        focusDateInfo.Invoke(calendar, new object[] { datePicker1.SelectedDate });
    }
}

这会使日历控件在弹出时看起来更干净;但如果用户开始选择不同的月份,仍然会在月的第一天显示焦点矩形

希望这有帮助, 问候