Нет EnabledDates
свойства. Существует свойство BlackoutDates , в которое можно добавлять даты, которые не выбираются.
Но если вы связываетесь со списком выбираемых дат, вы можете использовать CalendarDayButtonStyle
и конвертер, чтобы определить, следует ли выбирать конкретную дату:
public class DateToBoolConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values == null || values.Length < 2)
return true;
IList<DateTime> selectableDates = values[0] as IList<DateTime>;
if (selectableDates == null)
return true;
DateTime currentDate = (DateTime)values[1];
return selectableDates.Contains(currentDate);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
XAML:
<DatePicker x:Name="dpPicker">
<DatePicker.CalendarStyle>
<Style TargetType="Calendar">
<Setter Property="CalendarDayButtonStyle">
<Setter.Value>
<Style TargetType="CalendarDayButton">
<Style.Resources>
<local:DateToBoolConverter x:Key="DateToBoolConverter" />
</Style.Resources>
<Setter Property="IsHitTestVisible" Value="False" />
<Setter Property="Opacity" Value="0.5" />
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource DateToBoolConverter}">
<Binding Path="Tag" RelativeSource="{RelativeSource AncestorType=DatePicker}" />
<Binding Path="." />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="IsHitTestVisible" Value="True" />
<Setter Property="Opacity" Value="1" />
</DataTrigger>
</Style.Triggers>
</Style>
</Setter.Value>
</Setter>
</Style>
</DatePicker.CalendarStyle>
</DatePicker>
Пример использования:
public void foo(List<DateTime> ldtData, DatePicker dpPicker)
{
dpPicker.Tag = ldtData;
}