#c# #wpf
#c# #wpf
Вопрос:
Это программа для написания календаря DateTime
с использованием WPF. Я не использовал стили.
public void Display()
{
grdCalendar.Children.Clear();
int[,] calendar = new int[Column, Row];
try
{
CalendarHelper.PrintOutDate(calendar, Month, Year);
}
catch (ArgumentOutOfRangeException)
{
Environment.Exit(0);
}
for (int col = 0; col < Column; col )
{
for (int row = 0; row < Row; row )
{
if (calendar[col, row] != 0)
{
Label lbl = new Label
{
Content = calendar[col, row],
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
Grid.SetColumn(lbl, row);
Grid.SetRow(lbl, col);
grdCalendar.Children.Add(lbl);
}
}
}
}
public static void PrintOutDate(int[,] arr, int month, int year)
{
int days = FirstDay;
int day;
int date;
try
{
day = GetStartDayOfWeek(year, month);
date = GetDayCount(month, year);
}
catch (ArgumentOutOfRangeException e)
{
MessageBox.Show(e.Message);
throw new ArgumentOutOfRangeException();
}
for (int col = 0; col < Column; col )
{
for (int row = 0; row < Row; row )
{
if (days > date)
{
break;
}
if (col == 0)
{
if (day > row)
{
continue;
}
}
arr[col, row] = days ;
}
}
}
В функции PrintOutDate
функция GetStartDayOfWeek
возвращает, какой день недели является первым днем (Sun(0)~ Sat (6)). Функция GetDayCount
возвращает дату текущего месяца.
Затем введите увеличенное значение массива на дисплее.
Я бы хотел нарисовать воскресенье красным, а субботу синим, но я не знаю как.
Как я могу раскрасить дату?
Комментарии:
1. В качестве примечания к опубликованному вами коду
Grid.SetColumn(lbl, row);
иGrid.SetRow(lbl, col);
ошибочны, поскольку вы присваиваете строки столбцам и наоборот.
Ответ №1:
Поскольку воскресенье отображается в первом столбце, а суббота — в последнем, вы можете проверить, является ли текущий столбец 0
or 6
и установить Foreground
значение Label
Red
or Blue
.
if (calendar[col, row] != 0)
{
Label lbl = new Label
{
Content = calendar[col, row],
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
if (col == 0)
{
// It is Sunday
lbl.Foreground = Brushes.Red;
}
else if (col == 6)
{
// It is Saturday
lbl.Foreground = Brushes.Blue;
}
Grid.SetColumn(lbl, col);
Grid.SetRow(lbl, row);
grdCalendar.Children.Add(lbl);
}