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;
}
}
}