文章分類/

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

尚無瀏覽量
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 軟體專家
軟體專家

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

更多軟體新知

立即詢價

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

詢價資訊