文章分類/

Infragistics|Ultimate UI for WPF|XamDateTimeEditor 設置特定日期的文本顏色/背景顏色

248 瀏覽人次
2023-07-19 更新

infragistics log


我們將介紹如何自定義XamDateTimeEditor中顯示的日曆中特定日期的背景顏色和文本顏色。


實施方法

XamDateTimeEditor 的日曆部分中的日期控件由 CalendarDay 控件表示。

設置 CalendarDay 背景顏色 (Background) 和前景色 (Foreground) 以自定義週六和周日的表示方式。

此外,要指定特定日期,請在 ConverterParameter 屬性中設置以逗號分隔的日期信息。

<igEditors:XamDateTimeEditor Margin=“10” >

<igEditors:XamDateTimeEditor.Resources>

<Style TargetType=“{x:Type igEditors:XamMonthCalendar}”>

<EventSetter Event=“ExecutedCommand” Handler=“XamMonthCalendar_ExecutedCommand”/>

</Style>

<Style TargetType=“{x:Type igEditors:CalendarDay}”>

<!– 特定日の背景色を変更するコンバーター –>

<Setter Property=“Background”

Value=”{Binding RelativeSource={RelativeSource Self},

Converter={StaticResource HolidayToBackgroundConverter},

ConverterParameter=‘2019/10/14,2019/10/22’}” />

<!– 特定日の文字色を変更するコンバーター –>

<Setter Property=“Foreground”

Value=”{Binding RelativeSource={RelativeSource Self},

Converter={StaticResource HolidayToForegroundConverter},

ConverterParameter=‘2019/10/14,2019/10/22’}” />

</Style>

</igEditors:XamDateTimeEditor.Resources>

</igEditors:XamDateTimeEditor>


另外,轉換器在特定日期做出判斷。在下面的示例中,更改了特定日期(週六和周日)的背景顏色。

  ///      ///      public class HolidayToBackgroundConverter : IValueConverter     {         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)         {             if (parameter != null && !string.IsNullOrEmpty(parameter.ToString()))             {                 string[] holidays = parameter.ToString().Split(',');                 foreach(string holidayStr in holidays)                 {                     DateTime holiday = DateTime.Parse(holidayStr);                     if((value as CalendarDay).StartDate.Date.ToString("yyyy/MM/dd") == holiday.ToString("yyyy/MM/dd"))                     {                         return Brushes.Orange;                     }                 }             }             if ((value as CalendarDay).StartDate.DayOfWeek == DayOfWeek.Saturday)             {                 return Brushes.Blue;             }             else if ((value as CalendarDay).StartDate.DayOfWeek == DayOfWeek.Sunday)             {                 return Brushes.Red;             }             return value;         }         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)         {             throw new NotImplementedException();         }     }   

還為文本顏色創建轉換器。

  ///      /// カレンダー日付から特定日付の文字色を変換するコンバーター     ///      public class HolidayToForegroundConverter : IValueConverter     {         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)         {             // 特定日付の情報を取得             if (parameter != null && !string.IsNullOrEmpty(parameter.ToString()))             {                 string[] holidays = parameter.ToString().Split(',');                 foreach (string holidayStr in holidays)                 {                     DateTime holiday = DateTime.Parse(holidayStr);                     if ((value as CalendarDay).StartDate.Date.ToString("yyyy/MM/dd") == holiday.ToString("yyyy/MM/dd"))                     {                         return Brushes.White;                     }                 }             }             // 土曜             if ((value as CalendarDay).StartDate.DayOfWeek == DayOfWeek.Saturday)             {                 return Brushes.White;             }             // 日曜             else if ((value as CalendarDay).StartDate.DayOfWeek == DayOfWeek.Sunday)             {                 return Brushes.White;             }             return value;         }         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)         {             throw new NotImplementedException();         }     } 

另外,當選擇上個月或下個月的日曆時,插入以下過程以刷新繪圖。

<Style TargetType=“{x:Type igEditors:XamMonthCalendar}”>

<EventSetter Event=“ExecutedCommand” Handler=“XamMonthCalendar_ExecutedCommand”/>

</Style>


  private void XamMonthCalendar_ExecutedCommand(object sender, Infragistics.Windows.Controls.Events.ExecutedCommandEventArgs e)   {       XamMonthCalendar xamMonthCalendar = sender as XamMonthCalendar;       xamMonthCalendar.Dispatcher.BeginInvoke(new Action(() =>       {           DependencyObject fobj =                Infragistics.Windows.Utilities.GetDescendantFromType(                xamMonthCalendar,                true,                (calDay) =>                {                    BindingExpression bg = calDay.GetBindingExpression(CalendarDay.BackgroundProperty);                    if (bg != null)                    {                        bg.UpdateTarget();                    }                    BindingExpression fg = calDay.GetBindingExpression(CalendarDay.ForegroundProperty);                    if (fg != null)                    {                        fg.UpdateTarget();                    }                    return false;                });       }),DispatcherPriority.Background);   } 


快速跳轉目錄

✦ 群昱 AccessSoft 你的全面軟體解決方案 ✦

身為全球眾多知名軟體在台灣合作夥伴,歡迎諮詢你需要的軟體服務!

Picture of 軟體專家
軟體專家

群昱作為全球知名軟體推薦合作夥伴,致力於提供更多軟體解決方案給你!

更多軟體新知

立即詢價

請留下完整資訊,以便我們提供精確的服務內容給你。

詢價資訊