HI! All,
C# Code
I have a work around solution to change the background colour of the selected date. Please if anyone can improve the code or have a better solution can please update me.
XAML Code
<Window x:Class="TelerikDateSelectCal.Window1" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:telerikQuickStart="clr-namespace:Telerik.Windows.Controls.QuickStart;assembly=Telerik.Windows.Controls" xmlns:local="clr-namespace:TelerikDateSelectCal" Title="Window1" Height="300" Width="552" xml:lang="en-GB"> <Window.Resources> <local:CustomTemplateSelector x:Key="WorksDiaryDayTemplateSelector"> <local:CustomTemplateSelector.SelectedRed> <DataTemplate> <Border Background="Red" Width="20"> <TextBox Background="Transparent" Text="{Binding Text}" BorderThickness="0"/> </Border> </DataTemplate> </local:CustomTemplateSelector.SelectedRed> <local:CustomTemplateSelector.SelectedGreen> <DataTemplate> <Border Background="Green" Width="20"> <TextBox Background="Transparent" Text="{Binding Text}" BorderThickness="0"/> </Border> </DataTemplate> </local:CustomTemplateSelector.SelectedGreen> <local:CustomTemplateSelector.SelectedBlue> <DataTemplate> <Border Background="Blue" Width="20"> <TextBox Background="Transparent" Text="{Binding Text}" BorderThickness="0"/> </Border> </DataTemplate> </local:CustomTemplateSelector.SelectedBlue> <local:CustomTemplateSelector.SelectedYellow> <DataTemplate> <Border Background="Yellow" Width="20"> <TextBox Background="Transparent" Text="{Binding Text}" BorderThickness="0"/> </Border> </DataTemplate> </local:CustomTemplateSelector.SelectedYellow> <local:CustomTemplateSelector.SelectedBlank> <DataTemplate x:Name="Test"> <TextBox Background="Transparent" Text="{Binding Text}" BorderThickness="0" Width="20"/> </DataTemplate> </local:CustomTemplateSelector.SelectedBlank> </local:CustomTemplateSelector> </Window.Resources> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="20*"/> </Grid.ColumnDefinitions> <Grid Grid.Column="0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="20*"/> </Grid.ColumnDefinitions> <StackPanel Grid.Column="0"> <Button Name="btnRed" Width="20" Height="20" Margin="3" Background="Red" Click="SetComboOpen"/> <Button Name="btnGreen" Width="20" Height="20" Margin="3" Background="Green" Click="SetComboOpen"/> <Button Name="btnBlue" Width="20" Height="20" Margin="3" Background="Blue" Click="SetComboOpen"/> <Button Name="btnYellow" Width="20" Height="20" Margin="3" Background="Yellow" Click="SetComboOpen"/> <TextBox Margin="4" Name="txt1" Height="50" BorderBrush="BlueViolet" TextWrapping="Wrap" Width="150"></TextBox> </StackPanel> <StackPanel Grid.Column="1"> <ComboBox Name="cmbRed" Width="175" Margin="2" DropDownClosed="SetCacBackColor" > <ComboBoxItem>Red</ComboBoxItem> </ComboBox> <ComboBox Name="cmbGreen" Width="175" Margin="2" DropDownClosed="SetCacBackColor"> <ComboBoxItem>Green</ComboBoxItem> </ComboBox> <ComboBox Name="cmbBlue" Width="175" Margin="2" DropDownClosed="SetCacBackColor"> <ComboBoxItem>Blue</ComboBoxItem> </ComboBox> <ComboBox Name="cmbYellow" Width="175" Margin="2" DropDownClosed="SetCacBackColor"> <ComboBoxItem>Yellow</ComboBoxItem> </ComboBox> </StackPanel> </Grid> <telerik:RadCalendar x:Name="calendar" Grid.Column="1" Margin="2" SelectionMode="Single" IsTodayHighlighted="True" ViewsHeaderVisibility="Collapsed" Culture="en-GB" Rows="3" Columns="4" SelectionChanged="calendar_SelectionChanged" DayTemplateSelector="{StaticResource WorksDiaryDayTemplateSelector}"/> </Grid> </Window> C# Code
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Telerik; using Telerik.Windows.Controls; using Telerik.Windows.Controls.Calendar; using System.ComponentModel; using System.Collections.ObjectModel; using System.Data; #if !SILVERLIGHT using SelectionChangedEventArgs = System.Windows.Controls.SelectionChangedEventArgs; using DataTemplateSelector = System.Windows.Controls.DataTemplateSelector; #endif namespace TelerikDateSelectCal { /// <summary> /// Interaction logic for Window1.xaml /// </summary> public partial class Window1 : Window { List<DateTime> lstRedDate; List<DateTime> lstGreenDate; List<DateTime> lstBlueDate; List<DateTime> lstYellowDate; public Window1() { InitializeComponent(); lstRedDate = new List<DateTime>(); lstGreenDate = new List<DateTime>(); lstBlueDate = new List<DateTime>(); lstYellowDate = new List<DateTime>(); setAllComboENFalse(); this.cmbRed.IsEnabled = true; setSelectedDateGlbColor("Red"); } private void SetCacBackColor(object sender, EventArgs e) { } private void SetComboOpen(object sender, RoutedEventArgs e) { setAllComboENFalse(); string selecteColor = ""; if (sender == btnRed) { this.cmbRed.IsEnabled = true; selecteColor = "Red"; } else if (sender == btnGreen) { this.cmbGreen.IsEnabled = true; selecteColor = "Green"; } else if (sender == btnBlue) { this.cmbBlue.IsEnabled = true; selecteColor = "Blue"; } else if (sender == btnYellow) { this.cmbYellow.IsEnabled = true; selecteColor = "Yellow"; } setSelectedDateGlbColor(selecteColor); } protected void setSelectedDateGlbColor(string selectedColorName) { if (Application.Current.Properties.Contains("SelectedColor")) Application.Current.Properties.Remove("SelectedColor"); Application.Current.Properties.Add("SelectedColor", selectedColorName); } protected void setAllComboENFalse() { this.cmbRed.IsEnabled = false; this.cmbGreen.IsEnabled = false; this.cmbBlue.IsEnabled = false; this.cmbYellow.IsEnabled = false; } private void calendar_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (Application.Current.Properties.Contains("SelectedColor")) { string selectedColor = Application.Current.Properties["SelectedColor"].ToString(); switch (selectedColor) { case "Red": lstRedDate.Add((DateTime)calendar.SelectedDate.Value); if (Application.Current.Properties.Contains("RedColor")) Application.Current.Properties.Remove("RedColor"); Application.Current.Properties.Add("RedColor", lstRedDate); break; case "Green": lstGreenDate.Add((DateTime)calendar.SelectedDate.Value); if (Application.Current.Properties.Contains("GreenColor")) Application.Current.Properties.Remove("GreenColor"); Application.Current.Properties.Add("GreenColor", lstGreenDate); break; case "Blue": lstBlueDate.Add((DateTime)calendar.SelectedDate.Value); if (Application.Current.Properties.Contains("BlueColor")) Application.Current.Properties.Remove("BlueColor"); Application.Current.Properties.Add("BlueColor", lstBlueDate); break; case "Yellow": lstYellowDate.Add((DateTime)calendar.SelectedDate.Value); if (Application.Current.Properties.Contains("YellowColor")) Application.Current.Properties.Remove("YellowColor"); Application.Current.Properties.Add("YellowColor", lstYellowDate); break; default: MessageBox.Show("Invalid Date Color....", "Message....", MessageBoxButton.OK, MessageBoxImage.Exclamation); break; } DateTime tempDate; tempDate = new DateTime(calendar.DisplayDate.Year, calendar.DisplayDate.Month, 1); calendar.DisplayDate = tempDate.AddYears(8); calendar.DisplayDate = tempDate; } else { MessageBox.Show("Please Select a date Color ", "Message....", MessageBoxButton.OK, MessageBoxImage.Exclamation); } } } [Serializable()] public class CustomTemplateSelector : DataTemplateSelector { // ObservableCollection<Object> listTabsValue = new ObservableCollection<object>(); public override DataTemplate SelectTemplate(object item, DependencyObject container) { CalendarButtonContent content = item as CalendarButtonContent; string daySelColorFlg = ""; List<DateTime> lstDtRed = (List<DateTime>)Application.Current.Properties["RedColor"]; List<DateTime> lstDtGreen = (List<DateTime>)Application.Current.Properties["GreenColor"]; List<DateTime> lstDtBlue = (List<DateTime>)Application.Current.Properties["BlueColor"]; List<DateTime> lstDtYellow = (List<DateTime>)Application.Current.Properties["YellowColor"]; if (Application.Current.Properties.Contains("SelectedColor")) { daySelColorFlg = Application.Current.Properties["SelectedColor"].ToString(); } else return SelectedBlank ; if (content.ButtonType == CalendarButtonType.Date || content.ButtonType == CalendarButtonType.TodayDate) { switch (daySelColorFlg) { case "Red": if (lstDtRed != null) { if (lstDtRed.Contains(content.Date)) return SelectedRed; else if (lstDtGreen != null || lstDtBlue != null || lstDtYellow != null) { if(lstDtGreen != null) if (lstDtGreen.Contains(content.Date)) return SelectedGreen; if (lstDtBlue != null) if (lstDtBlue.Contains(content.Date)) return SelectedBlue; if (lstDtYellow != null) if (lstDtYellow.Contains(content.Date)) return SelectedYellow; } else return SelectedBlank; } else return SelectedBlank; break; case "Green": if (lstDtGreen != null) { if (lstDtGreen.Contains(content.Date)) return SelectedGreen; else if (lstDtRed != null || lstDtBlue != null || lstDtYellow != null) { if (lstDtRed != null) if (lstDtRed.Contains(content.Date)) return SelectedRed; if (lstDtBlue != null) if (lstDtBlue.Contains(content.Date)) return SelectedBlue; if (lstDtYellow != null) if (lstDtYellow.Contains(content.Date)) return SelectedYellow; } else return SelectedBlank; } else return SelectedBlank; break; case "Blue": if (lstDtBlue != null) { if (lstDtBlue.Contains(content.Date)) return SelectedBlue; else if (lstDtRed != null || lstDtGreen != null || lstDtYellow != null) { if (lstDtRed != null) if (lstDtRed.Contains(content.Date)) return SelectedRed; if (lstDtGreen != null) if (lstDtGreen.Contains(content.Date)) return SelectedGreen; if (lstDtYellow != null) if (lstDtYellow.Contains(content.Date)) return SelectedYellow; } else return SelectedBlank; } else return SelectedBlank; break; case "Yellow": if (lstDtYellow != null) { if (lstDtYellow.Contains(content.Date)) return SelectedYellow; else if (lstDtRed != null || lstDtGreen != null || lstDtBlue != null) { if (lstDtRed != null) if (lstDtRed.Contains(content.Date)) return SelectedRed; if (lstDtGreen != null) if (lstDtGreen.Contains(content.Date)) return SelectedGreen; if (lstDtBlue != null) if (lstDtBlue.Contains(content.Date)) return SelectedBlue; } else return SelectedBlank; } else return SelectedBlank; break; default: break; } } return SelectedBlank; } public DataTemplate SelectedRed { get; set; } public DataTemplate SelectedBlue { get; set; } public DataTemplate SelectedGreen { get; set; } public DataTemplate SelectedYellow { get; set; } public DataTemplate SelectedBlank { get; set; } } } Not best of the code, it's too lengthy and needs improvement so please le me know if you have improved it.
Thanks
Rahul