2013-11-22 50 views
1

我正在嘗試創建一個允許用戶單擊並切換選定日期的日曆。所以他們點擊他們想要包含的每個日期,並且一次選擇一個日期(不使用Ctrl或Shift鍵)。無論如何,爲了實現這個目標,我把兩個日曆放在我的控制之上。我做一個不透明的,讓對方一個打不可見的測試:如何檢測WPF日曆控件上的月份自動移動?

<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嘗試,但這些始終是零。

另外,(獎金問題)是否有一個簡單的方法來突出與不同顏色的日曆日期?喜歡用交替顏色突出每一天?紅色,藍色,紅色等。

感謝您的幫助。

回答

0

簡易方法

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語句。