Hi , I have a resource dictionary which has dependency property like that:
thanks.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:dp="http://schemas.microsoft.com/wpf/2008/toolkit" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:TestFromDb.Controls"><Style TargetType="{x:Type local:CalendarTimeslotItem}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type local:CalendarTimeslotItem}"><Border Background="{TemplateBinding Background}" BorderBrush="#A5BFE1" BorderThickness="0,0.5,0,0.5" x:Name="bd" Height="22"><Border CornerRadius="4,4,4,4" BorderThickness="1,1,1,1" BorderBrush="#5D8CC9" x:Name="hover" Opacity="0" Background="#10000000"><TextBlock Text="Click to add appointment" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#A39DD8" /></Border></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Opacity" Value="1" TargetName="hover" /></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><Style TargetType="{x:Type local:CalendarLedgerItem}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type local:CalendarLedgerItem}"><Border Background="#E3EFFF" BorderBrush="#6593CF" BorderThickness="0,0,1,1" Height="44" Width="50"><StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"><TextBlock Text="{TemplateBinding TimeslotA}" Foreground="#9493CF" FontSize="16" Margin="0,3,0,0"/><TextBlock Text="{TemplateBinding TimeslotB}" Foreground="#9493CF" Margin="1.5,0,0,0"/></StackPanel></Border></ControlTemplate></Setter.Value></Setter></Style><Style TargetType="{x:Type local:CalendarDay}"><Setter Property="ItemsPanel"><Setter.Value><ItemsPanelTemplate><local:TimeslotPanel /></ItemsPanelTemplate></Setter.Value></Setter><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type local:CalendarDay}"><Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"><Grid><StackPanel><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="White" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /><local:CalendarTimeslotItem Background="#E6EDF7" /></StackPanel><ItemsPresenter /></Grid></Border></ControlTemplate></Setter.Value></Setter></Style><!--times--><Style TargetType="{x:Type local:CalendarLedger}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type local:CalendarLedger}"><Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"><StackPanel><local:CalendarLedgerItem TimeslotA="12" TimeslotB="am" /><local:CalendarLedgerItem TimeslotA="1" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="2" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="3" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="4" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="5" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="6" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="7" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="8" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="9" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="10" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="11" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="12" TimeslotB="pm" /><local:CalendarLedgerItem TimeslotA="1" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="2" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="3" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="4" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="5" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="6" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="7" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="8" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="9" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="10" TimeslotB="00" /><local:CalendarLedgerItem TimeslotA="11" TimeslotB="00" /></StackPanel></Border></ControlTemplate></Setter.Value></Setter></Style><!--end--><Style TargetType="{x:Type local:Calendar}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type local:Calendar}"><Border Background="#E3EFFF" BorderBrush="#6593CF" BorderThickness="2,2,2,2"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="50" /><ColumnDefinition Width="*" /></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="38" /><RowDefinition Height="22" /><RowDefinition Height="*" /></Grid.RowDefinitions><!--next and previous--><StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="5,0,0,0"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="30"/><ColumnDefinition Width="150"/><ColumnDefinition Width="30"/><ColumnDefinition Width="30"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Button Grid.Column="0" Height="25" Command="{x:Static local:Calendar.PreviousDay}" Background="{x:Null}" BorderBrush="{x:Null}" ToolTip="اليوم السابق"><Image Source="/TestFromDb;component/Images/Previous.png" /></Button><DatePicker Grid.Column="1" Name="dpDates" Height="25" Background="{x:Null}" BorderBrush="{x:Null}" SelectedDate="{Binding Start}"/><Button Grid.Column="3" Height="25" Command="{x:Static local:Calendar.NextDay}" Background="{x:Null}" BorderBrush="{x:Null}" ToolTip="اليوم التالي"><Image Source="/TestFromDb;component/Images/Next.png" /></Button></Grid></StackPanel><!--end--><Border BorderBrush="#6593CF" BorderThickness="0,0,1,1" Grid.Column="0" Grid.Row="1" /><Border BorderBrush="#6593CF" BorderThickness="0,1,0,1" Background="#30000000" Grid.Column="1" Grid.Row="1"><TextBlock Text="{TemplateBinding CurrentDate}" HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="dayHeader" /></Border><ScrollViewer Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="50" /><ColumnDefinition Width="*" /></Grid.ColumnDefinitions><local:CalendarLedger Grid.Column="0" /><local:CalendarDay Grid.Column="1" x:Name="day" /></Grid></ScrollViewer></Grid></Border></ControlTemplate></Setter.Value></Setter></Style><Style TargetType="{x:Type local:CalendarAppointmentItem}"><Setter Property="StartTime" Value="{Binding StartTime}" /><Setter Property="EndTime" Value="{Binding EndTime}" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type local:CalendarAppointmentItem}"><Border CornerRadius="4,4,4,4" BorderThickness="1,1,1,1" BorderBrush="#5D8CC9" Background="#F1F5E3" Margin="1,1,5,1" Padding="3,1.5,0,1.5"><Border.Effect><DropShadowEffect Opacity="0.5" /></Border.Effect><ContentPresenter /></Border></ControlTemplate></Setter.Value></Setter></Style></ResourceDictionary> static Calendar() { DefaultStyleKeyProperty.OverrideMetadata(typeof(Calendar), new FrameworkPropertyMetadata(typeof(Calendar))); CommandManager.RegisterClassCommandBinding(typeof(Calendar), new CommandBinding(NextDay, new ExecutedRoutedEventHandler(OnExecutedNextDay), new CanExecuteRoutedEventHandler(OnCanExecuteNextDay))); CommandManager.RegisterClassCommandBinding(typeof(Calendar), new CommandBinding(PreviousDay, new ExecutedRoutedEventHandler(OnExecutedPreviousDay), new CanExecuteRoutedEventHandler(OnCanExecutePreviousDay))); } #region AddAppointment public static readonly RoutedEvent AddAppointmentEvent = CalendarTimeslotItem.AddAppointmentEvent.AddOwner(typeof(CalendarDay)); public event RoutedEventHandler AddAppointment { add { AddHandler(AddAppointmentEvent, value); } remove { RemoveHandler(AddAppointmentEvent, value); } } #endregion #region Appointments public static readonly DependencyProperty AppointmentsProperty = DependencyProperty.Register("Appointments", typeof(IEnumerable<Appointment>), typeof(Calendar), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(Calendar.OnAppointmentsChanged))); public IEnumerable<Appointment> Appointments { get { return (IEnumerable<Appointment>)GetValue(AppointmentsProperty); } set { SetValue(AppointmentsProperty, value); } } private static void OnAppointmentsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ((Calendar)d).OnAppointmentsChanged(e); } protected virtual void OnAppointmentsChanged(DependencyPropertyChangedEventArgs e) { FilterAppointments(); } #endregion #region CurrentDate /// <summary> /// CurrentDate Dependency Property /// </summary> public static readonly DependencyProperty CurrentDateProperty = DependencyProperty.Register("CurrentDate", typeof(DateTime), typeof(Calendar), new FrameworkPropertyMetadata((DateTime)DateTime.Now, new PropertyChangedCallback(OnCurrentDateChanged))); /// <summary> /// Gets or sets the CurrentDate property. This dependency property /// indicates .... /// </summary> public DateTime CurrentDate { get { return (DateTime)GetValue(CurrentDateProperty); } set { SetValue(CurrentDateProperty, value); } } /// <summary> /// Handles changes to the CurrentDate property. /// </summary> private static void OnCurrentDateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ((Calendar)d).OnCurrentDateChanged(e); } /// <summary> /// Provides derived classes an opportunity to handle changes to the CurrentDate property. /// </summary> protected virtual void OnCurrentDateChanged(DependencyPropertyChangedEventArgs e) { FilterAppointments(); } private void FilterAppointments() { DateTime byDate = CurrentDate; CalendarDay day = this.GetTemplateChild("day") as CalendarDay; day.ItemsSource = Appointments.ByDate(byDate); TextBlock dayHeader = this.GetTemplateChild("dayHeader") as TextBlock; dayHeader.Text = byDate.DayOfWeek.ToString(); } #endregion #region NextDay/PreviousDay public static readonly RoutedCommand NextDay = new RoutedCommand("NextDay", typeof(Calendar)); public static readonly RoutedCommand PreviousDay = new RoutedCommand("PreviousDay", typeof(Calendar)); // Next Day private static void OnCanExecuteNextDay(object sender, CanExecuteRoutedEventArgs e) { ((Calendar)sender).OnCanExecuteNextDay(e); } private static void OnExecutedNextDay(object sender, ExecutedRoutedEventArgs e) { ((Calendar)sender).OnExecutedNextDay(e); } protected virtual void OnCanExecuteNextDay(CanExecuteRoutedEventArgs e) { e.CanExecute = true; e.Handled = false; } protected virtual void OnExecutedNextDay(ExecutedRoutedEventArgs e) { CurrentDate += TimeSpan.FromDays(1); e.Handled = true; } // Previous Day private static void OnCanExecutePreviousDay(object sender, CanExecuteRoutedEventArgs e) { ((Calendar)sender).OnCanExecutePreviousDay(e); } private static void OnExecutedPreviousDay(object sender, ExecutedRoutedEventArgs e) { ((Calendar)sender).OnExecutedPreviousDay(e); } protected virtual void OnCanExecutePreviousDay(CanExecuteRoutedEventArgs e) { e.CanExecute = true; e.Handled = false; } protected virtual void OnExecutedPreviousDay(ExecutedRoutedEventArgs e) { CurrentDate -= TimeSpan.FromDays(1); e.Handled = true; } #endregion #region get selected date //protected static readonly DependencyProperty StartProperty = // DependencyProperty.Register("Start", typeof(DateTime?), typeof(DatePicker)); public static readonly DependencyProperty StartProperty = DependencyProperty.Register("Start", typeof(DateTime), typeof(DatePicker), new FrameworkPropertyMetadata( DateTime.Now, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); public DateTime Start { get { return (DateTime)GetValue(DatePicker.SelectedDateProperty);}//GetValue(StartProperty); } set { SetValue(StartProperty, value); } } private static void OnCanExecuteStart(object sender, CanExecuteRoutedEventArgs e) { ((Calendar)sender).OnCanExecuteStart(e); } private static void OnExecutedStart(object sender, ExecutedRoutedEventArgs e) { ((Calendar)sender).OnExecutedStart(e); } protected virtual void OnCanExecuteStart(CanExecuteRoutedEventArgs e) { e.CanExecute = true; e.Handled = false; } protected virtual void OnExecutedStart(ExecutedRoutedEventArgs e) { CurrentDate = Start; e.Handled = true; } #endregionwhat I want to do is send my selected date from date picker to this dependency property class, but it doesn't work, can anyone help me & till me what I miss please.
thanks.