您如何检测 WPF 日历控件上的自动月班?

Posted

技术标签:

【中文标题】您如何检测 WPF 日历控件上的自动月班?【英文标题】:How do you detect an automatic Month shift on the WPF Calendar control? 【发布时间】: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

如果我自己这么说的话,有点酷。它工作得很好,除非用户在不可见的日历上更改月份。

那么,我需要知道的是如何检测日历已经转移到显示不同的月份?

我尝试过使用DisplayDateStartDisplayDateEnd,但它们始终为空。

另外,(额外问题)有没有一种简单的方法可以用不同的颜色突出显示日历上的日期?喜欢用交替的颜色突出每一天?红色、蓝色、红色等……?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

天真的方法

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; 在类范围内声明的位置 根据您的要求,组合if 语句。

【讨论】:

以上是关于您如何检测 WPF 日历控件上的自动月班?的主要内容,如果未能解决你的问题,请参考以下文章

在EXCEL中插入日历控件后,如何添加到单元格上(带下拉箭头),点击后出现日历,选择一个日期自动填充并隐

C# winform 日历控件的日期显示格式

怎样在excel表格中 插入日历 达到可选日期的效果

Selenium2+python自动化25-js处理日历控件(修改readonly属性)转载

excel窗体中打开日历控件能否自动显示系统日期

Selenium2+python自动化25-js处理日历控件(修改readonly属性)