| File: System\Windows\Controls\Primitives\CalendarButton.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 CalendarButton : Button { /// <summary> /// Static constructor /// </summary> static CalendarButton() { DefaultStyleKeyProperty.OverrideMetadata(typeof(CalendarButton), new FrameworkPropertyMetadata(typeof(CalendarButton))); } /// <summary> /// Represents the CalendarButton that is used in Calendar Control. /// </summary> public CalendarButton() : base() { } #region Public Properties #region HasSelectedDays internal static readonly DependencyPropertyKey HasSelectedDaysPropertyKey = DependencyProperty.RegisterReadOnly( "HasSelectedDays", typeof(bool), typeof(CalendarButton), new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnVisualStatePropertyChanged))); /// <summary> /// Dependency property field for HasSelectedDays property /// </summary> public static readonly DependencyProperty HasSelectedDaysProperty = HasSelectedDaysPropertyKey.DependencyProperty; /// <summary> /// True if the CalendarButton represents a date range containing the display date /// </summary> public bool HasSelectedDays { get { return (bool)GetValue(HasSelectedDaysProperty); } internal set { SetValue(HasSelectedDaysPropertyKey, value); } } #endregion HasSelectedDays #region IsInactive internal static readonly DependencyPropertyKey IsInactivePropertyKey = DependencyProperty.RegisterReadOnly( "IsInactive", typeof(bool), typeof(CalendarButton), new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnVisualStatePropertyChanged))); /// <summary> /// Dependency property field for IsInactive property /// </summary> public static readonly DependencyProperty IsInactiveProperty = IsInactivePropertyKey.DependencyProperty; /// <summary> /// True if the CalendarButton represents /// a month that falls outside the current year /// or /// a year that falls outside the current decade /// </summary> public bool IsInactive { get { return (bool)GetValue(IsInactiveProperty); } internal set { SetValue(IsInactivePropertyKey, value); } } #endregion IsInactive #endregion Public Properties #region Internal Properties internal Calendar Owner { get; set; } #endregion Internal Properties #region Public Methods #endregion Public Methods #region Protected 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) { // Update the SelectionStates group if (HasSelectedDays) { VisualStates.GoToState(this, useTransitions, VisualStates.StateSelected, VisualStates.StateUnselected); } else { VisualStateManager.GoToState(this, VisualStates.StateUnselected, useTransitions); } // Update the ActiveStates group if (!IsInactive) { VisualStates.GoToState(this, useTransitions, VisualStates.StateActive, VisualStates.StateInactive); } else { VisualStateManager.GoToState(this, VisualStates.StateInactive, 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); } /// <summary> /// Creates the automation peer for the DayButton. /// </summary> /// <returns></returns> protected override AutomationPeer OnCreateAutomationPeer() { return new CalendarButtonAutomationPeer(this); } #endregion Protected Methods #region Internal Methods internal void SetContentInternal(string value) { SetCurrentValueInternal(ContentControl.ContentProperty, value); } #endregion } }