если я правильно понял ваш вопрос, вы хотели бы сделать следующее:
1. скрыть текущий выбор даты
2. сделать прямоугольник фокуса установленным на выбранную дату, когда появится элемент управления календаря (или я думаю, что избавлюсь от него)
N1 легко; Вы должны установить для свойства IsTodayHighlighted DatePicker значение false, и оно исчезнет
N2 немного сложнее. Возможно, есть более простой способ исправить это, но вот что работает для меня: DatePicker перемещает фокус на элемент управления календаря сразу после его отображения, вызывая
calendar.MoveFocus(new TraversalRequest(FocusNavigationDirection.First));
это делает прямоугольник фокуса показанным в первый день месяца; вы можете исправить это, заставив календарь переместить фокус на выбранную дату; ниже приведен обработчик события CalendarOpened для элемента управления DatePicker (в моем случае datePicker1). Я использую отражение, чтобы получить доступ к закрытому полю _calendar элемента управления datapicker и выполнить его закрытый метод 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 });
}
}
это сделало бы управление календарем более чистым при его появлении; но все равно будет отображаться прямоугольник фокуса в первый день месяца, если пользователь начнет выбирать разные месяцы
надеюсь, это поможет,
С уважением