| File: System\Windows\Controls\Primitives\CalendarDayButton.cs | Web Access |
| Project: src\wpf\src\Microsoft.DotNet.Wpf\src\PresentationFramework\PresentationFramework.csproj (PresentationFramework) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Windows.Automation.Peers; namespace System.Windows.Controls.Primitives { /// <summary> /// Represents a button control used in Calendar Control, which reacts to the Click event. /// </summary> public sealed class CalendarDayButton : Button { #region Constants /// <summary> /// Default content for the CalendarDayButton /// </summary> private const int DEFAULTCONTENT = 1; #endregion /// <summary> /// Static constructor /// </summary> static CalendarDayButton() { DefaultStyleKeyProperty.OverrideMetadata(typeof(CalendarDayButton), new FrameworkPropertyMetadata(typeof(CalendarDayButton))); } /// <summary> /// Represents the CalendarDayButton that is used in Calendar Control. /// </summary> public CalendarDayButton() : base() { } #region Public Properties #region IsToday internal static readonly DependencyPropertyKey IsTodayPropertyKey = DependencyProperty.RegisterReadOnly( "IsToday", typeof(bool), typeof(CalendarDayButton), new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnVisualStatePropertyChanged))); /// <summary> /// Dependency property field for IsToday property /// </summary> public static readonly DependencyProperty IsTodayProperty = IsTodayPropertyKey.DependencyProperty; /// <summary> /// True if the CalendarDayButton represents today /// </summary> public bool IsToday { get { return (bool)GetValue(IsTodayProperty); } } #endregion IsToday #region IsSelected internal static readonly DependencyPropertyKey IsSelectedPropertyKey = DependencyProperty.RegisterReadOnly( "IsSelected", typeof(bool), typeof(CalendarDayButton), new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnVisualStatePropertyChanged))); /// <summary> /// Dependency property field for IsSelected property /// </summary> public static readonly DependencyProperty IsSelectedProperty = IsSelectedPropertyKey.DependencyProperty; /// <summary> /// True if the CalendarDayButton is selected /// </summary> public bool IsSelected { get { return (bool)GetValue(IsSelectedProperty); } } #endregion IsSelected #region IsInactive internal static readonly DependencyPropertyKey IsInactivePropertyKey = DependencyProperty.RegisterReadOnly( "IsInactive", typeof(bool), typeof(CalendarDayButton), new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnVisualStatePropertyChanged))); /// <summary> /// Dependency property field for IsActive property /// </summary> public static readonly DependencyProperty IsInactiveProperty = IsInactivePropertyKey.DependencyProperty; /// <summary> /// True if the CalendarDayButton represents a day that falls in the currently displayed month /// </summary> public bool IsInactive { get { return (bool)GetValue(IsInactiveProperty); } } #endregion IsInactive #region IsBlackedOut internal static readonly DependencyPropertyKey IsBlackedOutPropertyKey = DependencyProperty.RegisterReadOnly( "IsBlackedOut", typeof(bool), typeof(CalendarDayButton), new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnVisualStatePropertyChanged))); /// <summary> /// Dependency property field for IsBlackedOut property /// </summary> public static readonly DependencyProperty IsBlackedOutProperty = IsBlackedOutPropertyKey.DependencyProperty; /// <summary> /// True if the CalendarDayButton represents a blackout date /// </summary> public bool IsBlackedOut { get { return (bool)GetValue(IsBlackedOutProperty); } } #endregion IsBlackedOut #region IsHighlighted internal static readonly DependencyPropertyKey IsHighlightedPropertyKey = DependencyProperty.RegisterReadOnly( "IsHighlighted", typeof(bool), typeof(CalendarDayButton), new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnVisualStatePropertyChanged))); /// <summary> /// Dependency property field for IsHighlighted property /// </summary> public static readonly DependencyProperty IsHighlightedProperty = IsHighlightedPropertyKey.DependencyProperty; /// <summary> /// True if the CalendarDayButton represents a highlighted date /// </summary> public bool IsHighlighted { get { return (bool)GetValue(IsHighlightedProperty); } } #endregion IsHighlighted #endregion Public Properties #region Internal Properties internal Calendar Owner { get; set; } #endregion Internal Properties #region Public Methods #endregion Public Methods #region Protected Methods /// <summary> /// Creates the automation peer for the CalendarDayButton. /// </summary> /// <returns></returns> protected override AutomationPeer OnCreateAutomationPeer() { return new CalendarButtonAutomationPeer(this); } #endregion Protected Methods #region Internal Methods /// <summary> /// Change to the correct visual state for the button. /// </summary> /// <param name="useTransitions"> /// true to use transitions when updating the visual state, false to /// snap directly to the new visual state. /// </param> internal override void ChangeVisualState(bool useTransitions) { // During the visual state change, refresh group state so that proper foreground and background colors are set. // Update the ActiveStates group // (Visual state "Inactive" doesn't take effect on previous selected CalendarDayButton in other month) // Force refresh to have matching InActive foreground and background colors. VisualStates.GoToState(this, useTransitions, VisualStates.StateActive, VisualStates.StateInactive); if (IsInactive) { VisualStateManager.GoToState(this, VisualStates.StateInactive, useTransitions); } // Update the DayStates group // (Visual state "Today" doesn't take effect when select and unselect today) // Force refresh to have matching Today foreground and background colors. VisualStateManager.GoToState(this, VisualStates.StateRegularDay, useTransitions); if (IsToday && this.Owner != null && this.Owner.IsTodayHighlighted) { VisualStates.GoToState(this, useTransitions, VisualStates.StateToday, VisualStates.StateRegularDay); } // Update the SelectionStates group last, to take priority over previous group state changes. // Force refresh to have matching Selected foreground and background colors. VisualStateManager.GoToState(this, VisualStates.StateUnselected, useTransitions); if (IsSelected || IsHighlighted) { VisualStates.GoToState(this, useTransitions, VisualStates.StateSelected, VisualStates.StateUnselected); } // Update the BlackoutDayStates group if (IsBlackedOut) { VisualStates.GoToState(this, useTransitions, VisualStates.StateBlackoutDay, VisualStates.StateNormalDay); } else { VisualStateManager.GoToState(this, VisualStates.StateNormalDay, useTransitions); } // Update the FocusStates group if (IsKeyboardFocused) { VisualStates.GoToState(this, useTransitions, VisualStates.StateCalendarButtonFocused, VisualStates.StateCalendarButtonUnfocused); } else { VisualStateManager.GoToState(this, VisualStates.StateCalendarButtonUnfocused, useTransitions); } base.ChangeVisualState(useTransitions); } internal void NotifyNeedsVisualStateUpdate() { UpdateVisualState(); } internal void SetContentInternal(string value) { SetCurrentValueInternal(ContentControl.ContentProperty, value); } #endregion Internal Methods } }