【发布时间】:2013-11-22 18:24:07
【问题描述】:
我正在尝试创建一个允许用户单击并切换所选日期的日历。因此,他们单击要包含的每个日期,并且一次选择一个(不使用 ctrl 或 shift 键)。无论如何,为了做到这一点,我将两个日历放在我的控件上。我使一个不透明并使另一个未命中测试可见:
<Calendar x:Name="_visibleCalendar" SelectionMode="MultipleRange" IsHitTestVisible="False" Margin="0,0,0,-46"/>
<Calendar x:Name="_selectableCalendar" Opacity="0.5" SelectedDatesChanged="DateClicked" VerticalAlignment="Bottom"/>
private void DateClicked(object sender, SelectionChangedEventArgs e)
{
DateTime? date = _selectableCalendar.SelectedDate;
_selectableCalendar.SelectedDate = null;
if (date != null)
{
if (_visibleCalendar.SelectedDates.Contains((DateTime) date))
{
_visibleCalendar.SelectedDates.Remove((DateTime) date);
}
else
{
_visibleCalendar.SelectedDates.Add((DateTime) date);
}
}
}
这样做是允许用户单击_selectableCalendar 并将他们的选择添加到_visibleCalendar.SelectedDates。
如果我自己这么说的话,有点酷。它工作得很好,除非用户在不可见的日历上更改月份。
那么,我需要知道的是如何检测日历已经转移到显示不同的月份?
我尝试过使用DisplayDateStart 和DisplayDateEnd,但它们始终为空。
另外,(额外问题)有没有一种简单的方法可以用不同的颜色突出显示日历上的日期?喜欢用交替的颜色突出每一天?红色、蓝色、红色等……?
感谢您的帮助。
【问题讨论】:
标签: c# wpf user-interface user-controls calendar