c# - 更改日历控件中某些假期日期的背景

标签 c# mysql wpf calendar

我在 wpf 桌面应用程序中使用基本日历控件,我的要求是使用 c# 语言将假期(来自 mysql 数据库的日期)与常规日期区分开来。我的代码是这样的:

<Calendar Name="MyCalendar"  Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" Grid.RowSpan="6"   Foreground="Aqua" SelectionMode="MultipleRange" SelectedDatesChanged="MyCalendar_SelectedDatesChanged" ></Calendar>

C#:

 private void MyCalendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
        {
            listboxSelectedDates.Items.Clear();
            foreach (DateTime dr in MyCalendar.SelectedDates)
            {
                listboxSelectedDates.Items.Add(dr.ToShortDateString());
            }//add selected dates in list

          MySqlConnection conn = new MySqlConnection("Server=localhost;database=newcompanydatabase;pwd=Admin@123;uid=root;");
            string q = "select _date from event_calendar;";
            MySqlCommand cmd = new MySqlCommand(q,conn);
            conn.Open();
            MySqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                if(MyCalendar.SelectedDate==rdr.GetDateTime(0))
                {
                    MessageBox.Show("******* holiday");                    

                }
            }//if selected date is holiday, show occasion.

        }

如何使用 C# 更改假期的背景颜色?

最佳答案

我们可以创建一个 DataTrigger每一个假期。

<Style x:Key="cdbKey" TargetType="CalendarDayButton">
    <Style.Triggers>
          <DataTrigger Binding="{Binding Date}" Value="12/07/2015">
              <Setter Property="Background" Value="Turquoise"/>
          </DataTrigger>
          ... more such DataTriggers for every holiday
    </Style.Triggers>
</Style>

但由于假期日期存储在数据库中,所以我们需要添加 DataTrigger在循环中使用代码。

  1. 定义一个 Style瞄准 CalenderDayButton .

    <Style x:Key="cdbKey" TargetType="CalendarDayButton">
    ...                         
    </Style>
    
  2. 设置CalendarDayButtonStyle属性(property)

    <Calendar ... CalendarDayButtonStyle="{StaticResource cdbKey}">

  3. 在适当的位置(窗口构造函数等)从数据库中获取您的假期日期。

    List<DateTime> holidaysDates = _getHolidayDatesFromDB();
    
  4. 添加DataTriggers使用步骤 3 中收到的假期日期列表循环,使用 C# 代码并将它们添加到 Style定义如上。

            Style s = (Style)this.Resources["cdbKey"];
    
            /* Loop through the Dates retrieved from DataBase*/
              DateTime holidayDate = DateTime.Parse("10/02/2015");
              DataTrigger dataTrigger = new DataTrigger() { Binding = new Binding("Date"), Value = holidayDate };
              dataTrigger.Setters.Add(new Setter(CalendarDayButton.BackgroundProperty, Brushes.SandyBrown));
              s.Triggers.Add(dataTrigger);
            /*End Loop*/
    

    我们使用了Binding("Date")作为我们的 Binding DataTrigger 中的属性(property)值(value), 这是因为 CalenderDayButtonDataContext自动设置为 DateTime值(value)。

我改了BackgroundCalenderDayButton到 SandyBrown,你可以变得更漂亮。

关于c# - 更改日历控件中某些假期日期的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34469567/

相关文章:

c# - 我可以在 Windows 应用商店应用程序中使用 Awesomium 吗?

mysql - 将 48.00 值保存为 MySQL 数据类型,将其保存为 48

c# - WPF 和 Silverlight 命令实现对于 M-V-VM (M-V-P) 模式毫无用处吗?

wpf - wpf 组合框中奇怪的数据绑定(bind)问题

wpf - 在 Codebehind WPF 中隐藏具有数据模板的列表框的项目

c# - 您能否在每个 block 中捕获不止一种类型的异常?

c# - 'Class' 是一个 'type' 但像 'variable' 一样使用

c# - 如何验证自定义 ASP.NET MVC 助手

mysql - MySQL 查询字符串不正确

mysql - 查找登录同一辆车的用户