繁体   English   中英

在 WPF 日历上标记特定日期

[英]Mark Down Specific Dates On WPF Calendar

我正在尝试从 WPF 日历控件上的数据库源中标记特定日期。

这是代码片段。

XAML

<Style x:Key="calendarDayButtonStyle" TargetType="CalendarDayButton">
<Calendar Name="CalendarSelectDate" />

.cs 代码。

var dateList = GetDatesFromDB();
Style dayButtonStyle = (Style)this.Resources["calendarDayButtonStyle"];
foreach (DateObject date in dateList)
{
  var DataTrigger dataTrigger = new DataTrigger() { Binding = new Binding("Date"), Value = new DateTime(date.Year, date.Month, date.Day) }; // 
  dataTrigger.Setters.Add(new Setter(FontWeightProperty, FontWeights.Bold));
  dayButtonStyle.Triggers.Add(dataTrigger);  // This will throw TriggerCollection -exception.
}
calendarDayButtonStyle.CalendarDayButtonStyle = dayButtonStyle;  // this will sealed TriggerCollection.

此代码适用于初始运行时。

但是,如果在运行时事件上再次运行它,比如说如果我在数据库中添加了新日期然后再次运行代码,它会抛出After a 'TriggerCollection' is in use (sealed), it cannot be modified. 错误。

据我了解,在将样式分配给日历后, TriggerCollection被密封。

有没有更好的方法在 WPF 日历上动态标记日期?

每次创建一个新Style 您可以基于您在 XAML 中使用BasedOn属性定义的内容:

var dateList = GetDatesFromDB();
Style dayButtonStyle = new Style() { BasedOn = (Style)this.Resources["calendarDayButtonStyle"] };
foreach (DateObject date in dateList)
{
    var dataTrigger = new DataTrigger() { Binding = new Binding("Date"), Value = new DateTime(date.Year, date.Month, date.Day) };
    dataTrigger.Setters.Add(new Setter(FontWeightProperty, FontWeights.Bold));
    dayButtonStyle.Triggers.Add(dataTrigger);
}
dayButtonStyle.Seal();
calendarDayButtonStyle.CalendarDayButtonStyle = dayButtonStyle;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM