[英]How do you detect an automatic Month shift on the WPF Calendar control?
我正在尝试创建一个日历,允许用户单击和切换选定的日期。 因此,他们单击要包括的每个日期,然后一次选择一个(不使用ctrl或Shift键)。 无论如何,要实现此目的,我将两个Calendar放在控件的上方。 我使一个不透明并使另一个未命中测试可见:
<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
。
如果我自己说的话,Kinda很酷。 除用户更改不可见日历上的月份外,它的工作原理非常好。
因此,我需要知道的是如何检测日历已更改为显示不同的月份?
我尝试使用DisplayDateStart
和DisplayDateEnd
,但是它们始终为null。
另外,(奖励问题)是否有一种简单的方法可以用不同的颜色突出显示日历上的日期? 喜欢每天用交替的颜色突出显示吗? 红色,蓝色,红色等。
谢谢你的帮助。
天真的方法
private void DateClicked(object sender, SelectionChangedEventArgs e)
{
var dt = selectableCalendar.SelectedDate;
if (_curr == null)
_curr = selectableCalendar.SelectedDate;
if (((DateTime)_curr).Month != ((DateTime)dt).Month)
{
_curr = dt;
// blah
}
}
DateTime? _curr;
在哪里DateTime? _curr;
DateTime? _curr;
在类范围内声明取决于您的要求,组合if
语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.