繁体   English   中英

您如何在WPF日历控件上检测到自动的Month转换?

[英]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很酷。 除用户更改不可见日历上的月份外,它的工作原理非常好。

因此,我需要知道的是如何检测日历已更改为显示不同的月份?

我尝试使用DisplayDateStartDisplayDateEnd ,但是它们始终为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM