【发布时间】:2018-07-14 14:04:41
【问题描述】:
我在 UWP 应用程序中使用 CalendarView。它以“月”模式显示。我想要的是,当用户选择一个日期时,它应该以某种方式突出显示所选日期的整个星期。
我能够使用以下代码获得一些东西,该代码在用户选择日期后选择一周中的所有日子,但它看起来不太好,事件处理分离/附加很麻烦且容易出错我相信可能会有更合适的选择:
private void cvMain_SelectedDatesChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
// detach event handler to prevent an endless loop
this.cvMain.SelectedDatesChanged -= cvMain_SelectedDatesChanged;
try
{
if (args.AddedDates.Count > 0)
{
// get first date of selection
var addedDateOffset = args.AddedDates[0];
var userSelectedDate = addedDateOffset.Date;
// get first day of the selected way and the last day
var startOfWeek = userSelectedDate.StartOfWeek();
var endOfWeek = userSelectedDate.EndOfWeek();
var selectedDatesList = new List<DateTimeOffset>();
selectedDatesList.Add(startOfWeek);
for (var dateInBetween = startOfWeek; dateInBetween <= endOfWeek; dateInBetween = dateInBetween.AddDays(1))
{
selectedDatesList.Add(dateInBetween);
}
selectedDatesList.Add(endOfWeek);
cvMain.SelectedDates.Clear();
foreach (var selectedDate in selectedDatesList)
{
cvMain.SelectedDates.Add(selectedDate);
}
}
}
finally
{
// reattach event handler
this.cvMain.SelectedDatesChanged += cvMain_SelectedDatesChanged;
}
}
我不确定我是否真的可以使用开箱即用的控件来完成我想要的操作,因为我们似乎无法直接访问日项目,CalendarViewDayItemChanging 事件仅在 Page_Load 上运行一次,不是在选择更改时。
有什么想法吗?
【问题讨论】:
标签: uwp calendar selection highlight calendarview