Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF日历上标记特定日期_C#_Wpf - Fatal编程技术网

C# 在WPF日历上标记特定日期

C# 在WPF日历上标记特定日期,c#,wpf,C#,Wpf,我正试图从WPF日历控件的数据库源中标记特定日期 下面是代码片段 XAML 此代码在初始运行时工作 但是,如果在运行时事件上再次运行它,比如说,如果我在数据库中添加了新日期,然后再次运行代码,它将在“TriggerCollection”使用(密封)后抛出,它将无法修改。错误 据我所知,将样式分配给日历后,TriggerCollection将被密封 是否有更好的方法在WPF日历上动态标记日期?每次都创建一个新的样式。您可以使用BasedOn属性将其建立在XAML中定义的基础上: var dateL

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

下面是代码片段

XAML

此代码在初始运行时工作

但是,如果在运行时事件上再次运行它,比如说,如果我在数据库中添加了新日期,然后再次运行代码,它将在“TriggerCollection”使用(密封)后抛出
,它将无法修改。
错误

据我所知,将样式分配给日历后,
TriggerCollection
将被密封


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

每次都创建一个新的
样式。您可以使用
BasedOn
属性将其建立在XAML中定义的基础上:

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;

非常感谢。但不幸的是,它产生了这个错误
“只能基于目标类型为基类型“IFrameworkInputElement”的样式”
。但是,你的回答给了我一个想法。我只是在.cs上编码样式。现在,标记特定日期的触发器可以动态工作。:)calendarDayButtonStyle必须与dayButtonStyle具有相同的
TargetType
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.
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;