Календарь с выделением цветом доступной даты

#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);
}