gpt4 book ai didi

带有突出显示日期的 wpf 日期选择器

转载 作者:行者123 更新时间:2023-12-04 14:42:26 24 4
gpt4 key购买 nike

在 WPF DatePicker 中有一些方法可以突出显示列表中的日期,例如 BlackoutDates 但可以选择?

我想向用户展示我的数据库中有一些数据的日子。

最佳答案

这是一种只需很少努力即可完成它的方法:

继承 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 中的第二个 Binding 是您感兴趣的日期列表,这里是 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();
}
}

现在在 DatePicker 上使用 CustomCalendarStyle 就完成了:
<DatePicker CalendarStyle="{StaticResource CustomCalendarStyle}" />

有关可重用的 HighlightDatePicker 的完整示例,请查看我的 GitHub 存储库: https://github.com/cmyksvoll/HighlightDatePicker

关于带有突出显示日期的 wpf 日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6372936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com