我使用 WPFToolkit 中的 DatePicker ,但由于当前日期和最后/第一天当月也突出显示,实际选择了哪个日期令人困惑。
除了所选日期以外,如何在日历中突出显示任何内容?
答案 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 });
}
}
这会使日历控件在弹出时看起来更干净;但如果用户开始选择不同的月份,仍然会在月的第一天显示焦点矩形
希望这有帮助, 问候