Как сделать так, чтобы WPFToolkit DatePicker выделял только выбранную дату? - PullRequest
0 голосов
/ 03 декабря 2009

Я использую DatePicker из WPFToolkit , но, поскольку текущая дата и последний / первый день месяца Также выделено, что сбивает с толку, какая дата на самом деле выбрана.

Как сделать так, чтобы в календаре ничего не выделялось, кроме выбранной даты?

альтернативный текст http://www.deviantsart.com/upload/fhsmni.png

1 Ответ

2 голосов
/ 04 декабря 2009

если я правильно понял ваш вопрос, вы хотели бы сделать следующее: 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 });
    }
}

это сделало бы управление календарем более чистым при его появлении; но все равно будет отображаться прямоугольник фокуса в первый день месяца, если пользователь начнет выбирать разные месяцы

надеюсь, это поможет, С уважением

...