This question is locked. New answers and comments are not allowed.
I'm using the RadCalendar control, and I'm getting flaky behavior after assigning a DayTemplateSelector. The logic is working correctly, however sometimes the calendar cannot select any dates (even the ones that still show as "selectable"). The problem goes away if I advance the calendar by one month using the arrow controls on it, then go back. After going forward and then back one month, the dates become selectable. I'm not doing anything else special with the calendar control aside from assigning the DayTemplateSelector. Is this a bug?
XAML:
Code-behind:
Selector class:
XAML:
<telerik:RadCalendar x:Name="calSchedule" Grid.Row="0" Grid.Column="3" Grid.RowSpan="5" Margin="12 2 2 2" Height="160" VerticalAlignment="Top" SelectionMode="Multiple"> <telerik:RadCalendar.DayTemplateSelector> <!--Custom Template selector, sill actually choose just one template--> <local:DayMaskSelector> <local:DayMaskSelector.DefaultTemplate> <!--A custom template--> <DataTemplate> <TextBlock Text="{Binding Text}" /> </DataTemplate> </local:DayMaskSelector.DefaultTemplate> </local:DayMaskSelector> </telerik:RadCalendar.DayTemplateSelector> </telerik:RadCalendar>Code-behind:
public void SetCalendarDaysOfWeek(int dayOfWeekMask){ DayMaskSelector existingSelector = calSchedule.DayTemplateSelector as DayMaskSelector; if (existingSelector != null && existingSelector.DayMask == dayOfWeekMask) { // Matches current mask; don't change it. return; } calSchedule.DayTemplateSelector = new DayMaskSelector(dayOfWeekMask);}Selector class:
public class DayMaskSelector : DataTemplateSelector { const int SundayValue = 1; const int MondayValue = 2; const int TuesdayValue = 4; const int WednesdayValue = 8; const int ThursdayValue = 16; const int FridayValue = 32; const int SaturdayValue = 64; private int _dayMask; public int DayMask { get { return _dayMask; } } public DayMaskSelector() : base() { } public DayMaskSelector(int dayMask) : base() { _dayMask = dayMask; } public override DataTemplate SelectTemplate(object item, DependencyObject container) { CalendarButtonContent content = item as CalendarButtonContent; if (content != null) { content.IsEnabled = true; if (_dayMask > 0) { if (content.Date.DayOfWeek == DayOfWeek.Sunday && ((_dayMask & SundayValue) == 0)) { content.IsEnabled = false; } if (content.Date.DayOfWeek == DayOfWeek.Monday && ((_dayMask & MondayValue) == 0)) { content.IsEnabled = false; } if (content.Date.DayOfWeek == DayOfWeek.Tuesday && ((_dayMask & TuesdayValue) == 0)) { content.IsEnabled = false; } if (content.Date.DayOfWeek == DayOfWeek.Wednesday && ((_dayMask & WednesdayValue) == 0)) { content.IsEnabled = false; } if (content.Date.DayOfWeek == DayOfWeek.Thursday && ((_dayMask & ThursdayValue) == 0)) { content.IsEnabled = false; } if (content.Date.DayOfWeek == DayOfWeek.Friday && ((_dayMask & FridayValue) == 0)) { content.IsEnabled = false; } if (content.Date.DayOfWeek == DayOfWeek.Saturday && ((_dayMask & SaturdayValue) == 0)) { content.IsEnabled = false; } } } return DefaultTemplate; } private DataTemplate defaultTemplate; public DataTemplate DefaultTemplate { get { return defaultTemplate; } set { this.defaultTemplate = value; } } }