[英]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.