wpf datepicker с выделенными датами - PullRequest
2 голосов
/ 16 июня 2011

В WPF DatePicker есть какой-то метод выделения дней, которые есть в списке, например BlackoutDates, но которые можно выбрать?

Я хочу представить пользователю дни, когда у меня есть некоторые данные в моей базе данных.

Ответы [ 2 ]

3 голосов
/ 07 апреля 2017

Вот один способ сделать это, который требует небольших усилий:

Наследовать стили по умолчанию для Calendar и CalendarDayButton и внести некоторые небольшие изменения:

<local:DateIsInListConverter x:Key="DateIsInListConverter" />

<Style x:Key="CustomCalendarDayButtonStyle" TargetType="{x:Type CalendarDayButton}" BasedOn="{StaticResource {x:Type CalendarDayButton}}">    
    <Style.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource DateIsInListConverter}">
                    <Binding />
                    <Binding ElementName="MyWindow" Path="HighlightedDates" />
                </MultiBinding>
            </DataTrigger.Binding>
            <Setter Property="Background" Value="Orange" />
        </DataTrigger>
    </Style.Triggers>
</Style>

<Style x:Key="CustomCalendarStyle" TargetType="{x:Type Calendar}" BasedOn="{StaticResource {x:Type Calendar}}">
    <Setter Property="CalendarDayButtonStyle" Value="{StaticResource CustomCalendarDayButtonStyle}" />
</Style>

Второе связывание в MultiBindingк вашему списку интересных дат, и вот реализация DateIsInListConverter:

public class DateIsInListConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values.Length < 2 || !(values[0] is DateTime) || !(values[1] is IEnumerable<DateTime>))
            return false;

        var date = (DateTime) values[0];
        var dateList = (IEnumerable<DateTime>) values[1];

        return dateList.Contains(date);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Теперь используйте CustomCalendarStyle для DatePicker, и все готово:

<DatePicker CalendarStyle="{StaticResource CustomCalendarStyle}" />

Для полного примера сМногоразовый HighlightDatePicker, посмотрите мой репозиторий GitHub: https://github.com/cmyksvoll/HighlightDatePicker

0 голосов
/ 17 июня 2011

Вам придется переопределить шаблон элемента управления DayButton и добавить источник данных, который ищет ваше свойство, чтобы оно было выделено выделенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...