我在 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
在循环中使用代码。
定义一个
Style
瞄准CalenderDayButton
.<Style x:Key="cdbKey" TargetType="CalendarDayButton"> ... </Style>
设置
CalendarDayButtonStyle
属性(property)<Calendar ... CalendarDayButtonStyle="{StaticResource cdbKey}">
在适当的位置(窗口构造函数等)从数据库中获取您的假期日期。
List<DateTime> holidaysDates = _getHolidayDatesFromDB();
添加
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), 这是因为CalenderDayButton
有DataContext
自动设置为DateTime
值(value)。
我改了Background
的 CalenderDayButton
到 SandyBrown,你可以变得更漂亮。
关于c# - 更改日历控件中某些假期日期的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34469567/