2017-01-23 6 views
0

Я ищу элемент управления (UWP или ASP.NET), который дает мне представление календарного года (финансовый год ;-)) и позволяет мне классифицировать дни. Поэтому я хотел бы иметь возможность щелкнуть день, а затем выбрать цвет, который указывает на занятость, доступность, ... Или как я могу сам создать что-то, что позволяет использовать эту функцию?Calendar Year View -

В настоящее время я использую это для планирования дней вперед. Похоже на это в excel.

enter image description here

ответ

0

Для изменения Background в CalendarViewDayItem, мы должны быть в состоянии использовать CalendarViewDayItemChangingEventArgs.Item свойство для получения CalendarViewDayItem в CalendarViewDayItemChanging случае.

Мы должны создать класс, в котором у него есть свойство MyColor и MyDateTime, чтобы сохранить Color и DateTime.

Например:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <CalendarView Name="MyCalendarView" SelectedDatesChanged="MyCalendarView_SelectedDatesChanged" CalendarViewDayItemChanging="MyCalendarView_CalendarViewDayItemChanging"></CalendarView> 
</Grid> 

Код позади:

public sealed partial class MainPage : Page 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     times = new ObservableCollection<DayItem>(); 
     for (int i = 1; i < 10; i++) 
     { 
      times.Add(new DayItem(new DateTime(2017, 1, i), Colors.Yellow)); 
     } 

     for (int i = 10; i < 20; i++) 
     { 
      times.Add(new DayItem(new DateTime(2016, 12, i), Colors.Green)); 
     } 
     for (int i = 20; i < 29; i++) 
     { 
      times.Add(new DayItem(new DateTime(2017, 1, i), Colors.Red)); 
     } 
    } 

    private ObservableCollection<DayItem> times; 

    private void MyCalendarView_SelectedDatesChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args) 
    { 
     bool add = false; 
     //If we double click the CalendarViewDayItem, the second time args.AddedDates.Count is 0 
     if (args.AddedDates.Count >= 1) 
     { 
      var newDate = args.AddedDates[0]; 
      for (int i = 0; i < times.Count; i++) 
      { 
       if (newDate.Date.Year == times[i].MyDateTime.Year && newDate.Date.Month == times[i].MyDateTime.Month && newDate.Date.Day == times[i].MyDateTime.Day) 
       { 
        add = true; 
       } 
      } 
      if (!add) 
      { 
       times.Add(new DayItem(newDate.DateTime, Colors.Green)); 
      } 
     } 
    } 

    private void MyCalendarView_CalendarViewDayItemChanging(CalendarView sender, CalendarViewDayItemChangingEventArgs args) 
    { 
     var selectDay = args.Item as CalendarViewDayItem; 
     for (int i = 0; i < times.Count; i++) 
     { 
      if (selectDay.Date.Year == times[i].MyDateTime.Year && selectDay.Date.Month == times[i].MyDateTime.Month && selectDay.Date.Day == times[i].MyDateTime.Day) 

       selectDay.Background = new SolidColorBrush(times[i].MyColor); 
     } 
    } 
} 

internal class DayItem 
{ 
    public DayItem(DateTime today, Color red) 
    { 
     MyDateTime = today; 
     MyColor = red; 
    } 

    public Color MyColor { get; set; } 
    public DateTime MyDateTime { get; set; } 
} 

Когда мы устанавливаем Background в CalendarViewDayItem, то CalendarViewDayItemChanging не будет уволен. Это происходит, когда загружается CalendarViewDayItem. Поэтому вы должны перезагрузить CalendarViewDayItem.

Также, если вы хотите показать Календарь, вы сможете использовать 12 CalendarViews на странице.

+0

Спасибо за понимание! Я продолжу и создаю пользовательский элемент управления yearview, в котором действительно используются 12 элементов управления CalendarView. Таким образом можно добавить пользовательские свойства, такие как начало и конец финансового года, к настраиваемому элементу управления. Ницца! –