簡體   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