Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / System / Windows / Controls / ToolTipService.cs / 1 / ToolTipService.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; using System.Windows.Media; using MS.Internal.KnownBoxes; using System.ComponentModel; namespace System.Windows.Controls { ////// Service class that provides the system implementation for displaying ToolTips. /// public static class ToolTipService { #region Attached Properties ////// The DependencyProperty for the ToolTip property. /// public static readonly DependencyProperty ToolTipProperty = DependencyProperty.RegisterAttached( "ToolTip", // Name typeof(object), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata((object) null)); ////// Gets the value of the ToolTip property on the specified object. /// /// The object on which to query the ToolTip property. ///The value of the ToolTip property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static object GetToolTip(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return element.GetValue(ToolTipProperty); } ////// Sets the ToolTip property on the specified object. /// /// The object on which to set the ToolTip property. /// /// The value of the ToolTip property. If the value is of type ToolTip, then /// that is the ToolTip that will be used (without any modification). If the value /// is of any other type, then that value will be used as the content for a ToolTip /// provided by this service, and the other attached properties of this service /// will be used to configure the ToolTip. /// public static void SetToolTip(DependencyObject element, object value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(ToolTipProperty, value); } ////// The DependencyProperty for the HorizontalOffset property. /// public static readonly DependencyProperty HorizontalOffsetProperty = DependencyProperty.RegisterAttached("HorizontalOffset", // Name typeof(double), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(0d)); // Default Value ////// Gets the value of the HorizontalOffset property. /// /// The object on which to query the property. ///The value of the property. [TypeConverter(typeof(LengthConverter))] [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static double GetHorizontalOffset(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (double)element.GetValue(HorizontalOffsetProperty); } ////// Sets the value of the HorizontalOffset property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetHorizontalOffset(DependencyObject element, double value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(HorizontalOffsetProperty, value); } ////// The DependencyProperty for the VerticalOffset property. /// public static readonly DependencyProperty VerticalOffsetProperty = DependencyProperty.RegisterAttached("VerticalOffset", // Name typeof(double), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(0d)); // Default Value ////// Gets the value of the VerticalOffset property. /// /// The object on which to query the property. ///The value of the property. [TypeConverter(typeof(LengthConverter))] [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static double GetVerticalOffset(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (double)element.GetValue(VerticalOffsetProperty); } ////// Sets the value of the VerticalOffset property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetVerticalOffset(DependencyObject element, double value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(VerticalOffsetProperty, value); } ////// The DependencyProperty for HasDropShadow /// public static readonly DependencyProperty HasDropShadowProperty = DependencyProperty.RegisterAttached("HasDropShadow", // Name typeof(bool), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(BooleanBoxes.FalseBox)); // Default Value ////// Gets the value of the HasDropShadow property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static bool GetHasDropShadow(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (bool)element.GetValue(HasDropShadowProperty); } ////// Sets the value of the HasDropShadow property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetHasDropShadow(DependencyObject element, bool value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(HasDropShadowProperty, BooleanBoxes.Box(value)); } ////// The DependencyProperty for the PlacementTarget property. /// public static readonly DependencyProperty PlacementTargetProperty = DependencyProperty.RegisterAttached("PlacementTarget", // Name typeof(UIElement), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata((UIElement)null)); // Default Value ////// Gets the value of the PlacementTarget property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static UIElement GetPlacementTarget(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (UIElement)element.GetValue(PlacementTargetProperty); } ////// Sets the value of the PlacementTarget property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetPlacementTarget(DependencyObject element, UIElement value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(PlacementTargetProperty, value); } ////// The DependencyProperty for the PlacementRectangle property. /// public static readonly DependencyProperty PlacementRectangleProperty = DependencyProperty.RegisterAttached("PlacementRectangle", // Name typeof(Rect), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(Rect.Empty)); // Default Value ////// Gets the value of the PlacementRectangle property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static Rect GetPlacementRectangle(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (Rect)element.GetValue(PlacementRectangleProperty); } ////// Sets the value of the PlacementRectangle property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetPlacementRectangle(DependencyObject element, Rect value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(PlacementRectangleProperty, value); } ////// The DependencyProperty for the Placement property. /// public static readonly DependencyProperty PlacementProperty = DependencyProperty.RegisterAttached("Placement", // Name typeof(PlacementMode), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(PlacementMode.Mouse)); // Default Value ////// Gets the value of the Placement property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static PlacementMode GetPlacement(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (PlacementMode)element.GetValue(PlacementProperty); } ////// Sets the value of the Placement property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetPlacement(DependencyObject element, PlacementMode value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(PlacementProperty, value); } ////// The DependencyProperty for the ShowOnDisabled property. /// public static readonly DependencyProperty ShowOnDisabledProperty = DependencyProperty.RegisterAttached("ShowOnDisabled", // Name typeof(bool), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(BooleanBoxes.FalseBox)); // Default Value ////// Gets the value of the ShowOnDisabled property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static bool GetShowOnDisabled(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (bool)element.GetValue(ShowOnDisabledProperty); } ////// Sets the value of the ShowOnDisabled property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetShowOnDisabled(DependencyObject element, bool value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(ShowOnDisabledProperty, BooleanBoxes.Box(value)); } ////// Read-only Key Token for the IsOpen property. /// private static readonly DependencyPropertyKey IsOpenPropertyKey = DependencyProperty.RegisterAttachedReadOnly("IsOpen", // Name typeof(bool), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(BooleanBoxes.FalseBox)); // Default Value ////// The DependencyProperty for the IsOpen property. /// public static readonly DependencyProperty IsOpenProperty = IsOpenPropertyKey.DependencyProperty; ////// Gets the value of the IsOpen property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static bool GetIsOpen(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (bool)element.GetValue(IsOpenProperty); } ////// Sets the value of the IsOpen property. /// /// The object on which to set the value. /// The desired value of the property. private static void SetIsOpen(DependencyObject element, bool value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(IsOpenPropertyKey, BooleanBoxes.Box(value)); } ////// The DependencyProperty for the IsEnabled property. /// public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", // Name typeof(bool), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(BooleanBoxes.TrueBox)); // Default Value ////// Gets the value of the IsEnabled property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static bool GetIsEnabled(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (bool)element.GetValue(IsEnabledProperty); } ////// Sets the value of the IsEnabled property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetIsEnabled(DependencyObject element, bool value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(IsEnabledProperty, BooleanBoxes.Box(value)); } private static bool PositiveValueValidation(object o) { return ((int)o) >= 0; } ////// The DependencyProperty for the ShowDuration property. /// public static readonly DependencyProperty ShowDurationProperty = DependencyProperty.RegisterAttached("ShowDuration", // Name typeof(int), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(5000), // Default Value new ValidateValueCallback(PositiveValueValidation)); // Value validation ////// Gets the value of the ShowDuration property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static int GetShowDuration(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (int)element.GetValue(ShowDurationProperty); } ////// Sets the value of the ShowDuration property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetShowDuration(DependencyObject element, int value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(ShowDurationProperty, value); } ////// The DependencyProperty for the InitialShowDelay property. /// public static readonly DependencyProperty InitialShowDelayProperty = DependencyProperty.RegisterAttached("InitialShowDelay", // Name typeof(int), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(SystemParameters.MouseHoverTimeMilliseconds), // Default Value new ValidateValueCallback(PositiveValueValidation)); // Value validation ////// Gets the value of the InitialShowDelay property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static int GetInitialShowDelay(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (int)element.GetValue(InitialShowDelayProperty); } ////// Sets the value of the InitialShowDelay property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetInitialShowDelay(DependencyObject element, int value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(InitialShowDelayProperty, value); } ////// The DependencyProperty for the BetweenShowDelay property. /// public static readonly DependencyProperty BetweenShowDelayProperty = DependencyProperty.RegisterAttached("BetweenShowDelay", // Name typeof(int), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(100), // Default Value new ValidateValueCallback(PositiveValueValidation)); // Value validation ////// Gets the value of the BetweenShowDelay property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static int GetBetweenShowDelay(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (int)element.GetValue(BetweenShowDelayProperty); } ////// Sets the value of the BetweenShowDelay property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetBetweenShowDelay(DependencyObject element, int value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(BetweenShowDelayProperty, value); } #endregion #region Events ////// The event raised when a ToolTip is going to be shown on an element. /// /// Mark the event as handled if manually showing a ToolTip. /// /// Replacing the value of the ToolTip property is allowed /// (example: for delay-loading). Do not mark the event as handled /// in this case if the system is to show the ToolTip. /// public static readonly RoutedEvent ToolTipOpeningEvent = EventManager.RegisterRoutedEvent("ToolTipOpening", RoutingStrategy.Direct, typeof(ToolTipEventHandler), typeof(ToolTipService)); ////// The event raised when a ToolTip on an element that was shown /// should now be hidden. /// public static readonly RoutedEvent ToolTipClosingEvent = EventManager.RegisterRoutedEvent("ToolTipClosing", RoutingStrategy.Direct, typeof(ToolTipEventHandler), typeof(ToolTipService)); #endregion #region Implementation internal static readonly RoutedEvent FindToolTipEvent = EventManager.RegisterRoutedEvent("FindToolTip", RoutingStrategy.Bubble, typeof(FindToolTipEventHandler), typeof(ToolTipService)); static ToolTipService() { EventManager.RegisterClassHandler(typeof(UIElement), FindToolTipEvent, new FindToolTipEventHandler(OnFindToolTip)); EventManager.RegisterClassHandler(typeof(ContentElement), FindToolTipEvent, new FindToolTipEventHandler(OnFindToolTip)); EventManager.RegisterClassHandler(typeof(UIElement3D), FindToolTipEvent, new FindToolTipEventHandler(OnFindToolTip)); } private static void OnFindToolTip(object sender, FindToolTipEventArgs e) { if (e.TargetElement == null) { DependencyObject o = sender as DependencyObject; if (o != null) { if (PopupControlService.Current.StopLookingForToolTip(o)) { // Stop looking e.Handled = true; e.KeepCurrentActive = true; } else { if (ToolTipIsEnabled(o)) { // Store for later e.TargetElement = o; e.Handled = true; } } } } } private static bool ToolTipIsEnabled(DependencyObject o) { if ((GetToolTip(o) != null) && GetIsEnabled(o)) { if (PopupControlService.IsElementEnabled(o) || GetShowOnDisabled(o)) { return true; } } return false; } #endregion } ////// The callback type for the events when a ToolTip should open or close. /// public delegate void ToolTipEventHandler(object sender, ToolTipEventArgs e); ////// Event arguments for the events when a ToolTip should open or close. /// public sealed class ToolTipEventArgs : RoutedEventArgs { ////// Called internally to create opening or closing event arguments. /// /// Whether this is the opening or closing event. internal ToolTipEventArgs(bool opening) { if (opening) { RoutedEvent = ToolTipService.ToolTipOpeningEvent; } else { RoutedEvent = ToolTipService.ToolTipClosingEvent; } } ////// Invokes the event handler. /// /// The delegate to call. /// The target of the event. protected override void InvokeEventHandler(Delegate genericHandler, object genericTarget) { ToolTipEventHandler handler = (ToolTipEventHandler)genericHandler; handler(genericTarget, this); } } internal delegate void FindToolTipEventHandler(object sender, FindToolTipEventArgs e); internal sealed class FindToolTipEventArgs : RoutedEventArgs { internal FindToolTipEventArgs() { RoutedEvent = ToolTipService.FindToolTipEvent; } internal DependencyObject TargetElement { get { return _targetElement; } set { _targetElement = value; } } internal bool KeepCurrentActive { get { return _keepCurrentActive; } set { _keepCurrentActive = value; } } ////// Invokes the event handler. /// /// The delegate to call. /// The target of the event. protected override void InvokeEventHandler(Delegate genericHandler, object genericTarget) { FindToolTipEventHandler handler = (FindToolTipEventHandler)genericHandler; handler(genericTarget, this); } private DependencyObject _targetElement; private bool _keepCurrentActive; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; using System.Windows.Media; using MS.Internal.KnownBoxes; using System.ComponentModel; namespace System.Windows.Controls { ////// Service class that provides the system implementation for displaying ToolTips. /// public static class ToolTipService { #region Attached Properties ////// The DependencyProperty for the ToolTip property. /// public static readonly DependencyProperty ToolTipProperty = DependencyProperty.RegisterAttached( "ToolTip", // Name typeof(object), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata((object) null)); ////// Gets the value of the ToolTip property on the specified object. /// /// The object on which to query the ToolTip property. ///The value of the ToolTip property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static object GetToolTip(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return element.GetValue(ToolTipProperty); } ////// Sets the ToolTip property on the specified object. /// /// The object on which to set the ToolTip property. /// /// The value of the ToolTip property. If the value is of type ToolTip, then /// that is the ToolTip that will be used (without any modification). If the value /// is of any other type, then that value will be used as the content for a ToolTip /// provided by this service, and the other attached properties of this service /// will be used to configure the ToolTip. /// public static void SetToolTip(DependencyObject element, object value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(ToolTipProperty, value); } ////// The DependencyProperty for the HorizontalOffset property. /// public static readonly DependencyProperty HorizontalOffsetProperty = DependencyProperty.RegisterAttached("HorizontalOffset", // Name typeof(double), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(0d)); // Default Value ////// Gets the value of the HorizontalOffset property. /// /// The object on which to query the property. ///The value of the property. [TypeConverter(typeof(LengthConverter))] [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static double GetHorizontalOffset(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (double)element.GetValue(HorizontalOffsetProperty); } ////// Sets the value of the HorizontalOffset property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetHorizontalOffset(DependencyObject element, double value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(HorizontalOffsetProperty, value); } ////// The DependencyProperty for the VerticalOffset property. /// public static readonly DependencyProperty VerticalOffsetProperty = DependencyProperty.RegisterAttached("VerticalOffset", // Name typeof(double), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(0d)); // Default Value ////// Gets the value of the VerticalOffset property. /// /// The object on which to query the property. ///The value of the property. [TypeConverter(typeof(LengthConverter))] [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static double GetVerticalOffset(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (double)element.GetValue(VerticalOffsetProperty); } ////// Sets the value of the VerticalOffset property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetVerticalOffset(DependencyObject element, double value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(VerticalOffsetProperty, value); } ////// The DependencyProperty for HasDropShadow /// public static readonly DependencyProperty HasDropShadowProperty = DependencyProperty.RegisterAttached("HasDropShadow", // Name typeof(bool), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(BooleanBoxes.FalseBox)); // Default Value ////// Gets the value of the HasDropShadow property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static bool GetHasDropShadow(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (bool)element.GetValue(HasDropShadowProperty); } ////// Sets the value of the HasDropShadow property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetHasDropShadow(DependencyObject element, bool value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(HasDropShadowProperty, BooleanBoxes.Box(value)); } ////// The DependencyProperty for the PlacementTarget property. /// public static readonly DependencyProperty PlacementTargetProperty = DependencyProperty.RegisterAttached("PlacementTarget", // Name typeof(UIElement), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata((UIElement)null)); // Default Value ////// Gets the value of the PlacementTarget property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static UIElement GetPlacementTarget(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (UIElement)element.GetValue(PlacementTargetProperty); } ////// Sets the value of the PlacementTarget property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetPlacementTarget(DependencyObject element, UIElement value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(PlacementTargetProperty, value); } ////// The DependencyProperty for the PlacementRectangle property. /// public static readonly DependencyProperty PlacementRectangleProperty = DependencyProperty.RegisterAttached("PlacementRectangle", // Name typeof(Rect), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(Rect.Empty)); // Default Value ////// Gets the value of the PlacementRectangle property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static Rect GetPlacementRectangle(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (Rect)element.GetValue(PlacementRectangleProperty); } ////// Sets the value of the PlacementRectangle property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetPlacementRectangle(DependencyObject element, Rect value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(PlacementRectangleProperty, value); } ////// The DependencyProperty for the Placement property. /// public static readonly DependencyProperty PlacementProperty = DependencyProperty.RegisterAttached("Placement", // Name typeof(PlacementMode), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(PlacementMode.Mouse)); // Default Value ////// Gets the value of the Placement property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static PlacementMode GetPlacement(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (PlacementMode)element.GetValue(PlacementProperty); } ////// Sets the value of the Placement property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetPlacement(DependencyObject element, PlacementMode value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(PlacementProperty, value); } ////// The DependencyProperty for the ShowOnDisabled property. /// public static readonly DependencyProperty ShowOnDisabledProperty = DependencyProperty.RegisterAttached("ShowOnDisabled", // Name typeof(bool), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(BooleanBoxes.FalseBox)); // Default Value ////// Gets the value of the ShowOnDisabled property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static bool GetShowOnDisabled(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (bool)element.GetValue(ShowOnDisabledProperty); } ////// Sets the value of the ShowOnDisabled property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetShowOnDisabled(DependencyObject element, bool value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(ShowOnDisabledProperty, BooleanBoxes.Box(value)); } ////// Read-only Key Token for the IsOpen property. /// private static readonly DependencyPropertyKey IsOpenPropertyKey = DependencyProperty.RegisterAttachedReadOnly("IsOpen", // Name typeof(bool), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(BooleanBoxes.FalseBox)); // Default Value ////// The DependencyProperty for the IsOpen property. /// public static readonly DependencyProperty IsOpenProperty = IsOpenPropertyKey.DependencyProperty; ////// Gets the value of the IsOpen property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static bool GetIsOpen(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (bool)element.GetValue(IsOpenProperty); } ////// Sets the value of the IsOpen property. /// /// The object on which to set the value. /// The desired value of the property. private static void SetIsOpen(DependencyObject element, bool value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(IsOpenPropertyKey, BooleanBoxes.Box(value)); } ////// The DependencyProperty for the IsEnabled property. /// public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", // Name typeof(bool), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(BooleanBoxes.TrueBox)); // Default Value ////// Gets the value of the IsEnabled property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static bool GetIsEnabled(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (bool)element.GetValue(IsEnabledProperty); } ////// Sets the value of the IsEnabled property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetIsEnabled(DependencyObject element, bool value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(IsEnabledProperty, BooleanBoxes.Box(value)); } private static bool PositiveValueValidation(object o) { return ((int)o) >= 0; } ////// The DependencyProperty for the ShowDuration property. /// public static readonly DependencyProperty ShowDurationProperty = DependencyProperty.RegisterAttached("ShowDuration", // Name typeof(int), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(5000), // Default Value new ValidateValueCallback(PositiveValueValidation)); // Value validation ////// Gets the value of the ShowDuration property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static int GetShowDuration(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (int)element.GetValue(ShowDurationProperty); } ////// Sets the value of the ShowDuration property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetShowDuration(DependencyObject element, int value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(ShowDurationProperty, value); } ////// The DependencyProperty for the InitialShowDelay property. /// public static readonly DependencyProperty InitialShowDelayProperty = DependencyProperty.RegisterAttached("InitialShowDelay", // Name typeof(int), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(SystemParameters.MouseHoverTimeMilliseconds), // Default Value new ValidateValueCallback(PositiveValueValidation)); // Value validation ////// Gets the value of the InitialShowDelay property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static int GetInitialShowDelay(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (int)element.GetValue(InitialShowDelayProperty); } ////// Sets the value of the InitialShowDelay property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetInitialShowDelay(DependencyObject element, int value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(InitialShowDelayProperty, value); } ////// The DependencyProperty for the BetweenShowDelay property. /// public static readonly DependencyProperty BetweenShowDelayProperty = DependencyProperty.RegisterAttached("BetweenShowDelay", // Name typeof(int), // Type typeof(ToolTipService), // Owner new FrameworkPropertyMetadata(100), // Default Value new ValidateValueCallback(PositiveValueValidation)); // Value validation ////// Gets the value of the BetweenShowDelay property. /// /// The object on which to query the property. ///The value of the property. [AttachedPropertyBrowsableForType(typeof(DependencyObject))] public static int GetBetweenShowDelay(DependencyObject element) { if (element == null) { throw new ArgumentNullException("element"); } return (int)element.GetValue(BetweenShowDelayProperty); } ////// Sets the value of the BetweenShowDelay property. /// /// The object on which to set the value. /// The desired value of the property. public static void SetBetweenShowDelay(DependencyObject element, int value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(BetweenShowDelayProperty, value); } #endregion #region Events ////// The event raised when a ToolTip is going to be shown on an element. /// /// Mark the event as handled if manually showing a ToolTip. /// /// Replacing the value of the ToolTip property is allowed /// (example: for delay-loading). Do not mark the event as handled /// in this case if the system is to show the ToolTip. /// public static readonly RoutedEvent ToolTipOpeningEvent = EventManager.RegisterRoutedEvent("ToolTipOpening", RoutingStrategy.Direct, typeof(ToolTipEventHandler), typeof(ToolTipService)); ////// The event raised when a ToolTip on an element that was shown /// should now be hidden. /// public static readonly RoutedEvent ToolTipClosingEvent = EventManager.RegisterRoutedEvent("ToolTipClosing", RoutingStrategy.Direct, typeof(ToolTipEventHandler), typeof(ToolTipService)); #endregion #region Implementation internal static readonly RoutedEvent FindToolTipEvent = EventManager.RegisterRoutedEvent("FindToolTip", RoutingStrategy.Bubble, typeof(FindToolTipEventHandler), typeof(ToolTipService)); static ToolTipService() { EventManager.RegisterClassHandler(typeof(UIElement), FindToolTipEvent, new FindToolTipEventHandler(OnFindToolTip)); EventManager.RegisterClassHandler(typeof(ContentElement), FindToolTipEvent, new FindToolTipEventHandler(OnFindToolTip)); EventManager.RegisterClassHandler(typeof(UIElement3D), FindToolTipEvent, new FindToolTipEventHandler(OnFindToolTip)); } private static void OnFindToolTip(object sender, FindToolTipEventArgs e) { if (e.TargetElement == null) { DependencyObject o = sender as DependencyObject; if (o != null) { if (PopupControlService.Current.StopLookingForToolTip(o)) { // Stop looking e.Handled = true; e.KeepCurrentActive = true; } else { if (ToolTipIsEnabled(o)) { // Store for later e.TargetElement = o; e.Handled = true; } } } } } private static bool ToolTipIsEnabled(DependencyObject o) { if ((GetToolTip(o) != null) && GetIsEnabled(o)) { if (PopupControlService.IsElementEnabled(o) || GetShowOnDisabled(o)) { return true; } } return false; } #endregion } ////// The callback type for the events when a ToolTip should open or close. /// public delegate void ToolTipEventHandler(object sender, ToolTipEventArgs e); ////// Event arguments for the events when a ToolTip should open or close. /// public sealed class ToolTipEventArgs : RoutedEventArgs { ////// Called internally to create opening or closing event arguments. /// /// Whether this is the opening or closing event. internal ToolTipEventArgs(bool opening) { if (opening) { RoutedEvent = ToolTipService.ToolTipOpeningEvent; } else { RoutedEvent = ToolTipService.ToolTipClosingEvent; } } ////// Invokes the event handler. /// /// The delegate to call. /// The target of the event. protected override void InvokeEventHandler(Delegate genericHandler, object genericTarget) { ToolTipEventHandler handler = (ToolTipEventHandler)genericHandler; handler(genericTarget, this); } } internal delegate void FindToolTipEventHandler(object sender, FindToolTipEventArgs e); internal sealed class FindToolTipEventArgs : RoutedEventArgs { internal FindToolTipEventArgs() { RoutedEvent = ToolTipService.FindToolTipEvent; } internal DependencyObject TargetElement { get { return _targetElement; } set { _targetElement = value; } } internal bool KeepCurrentActive { get { return _keepCurrentActive; } set { _keepCurrentActive = value; } } ////// Invokes the event handler. /// /// The delegate to call. /// The target of the event. protected override void InvokeEventHandler(Delegate genericHandler, object genericTarget) { FindToolTipEventHandler handler = (FindToolTipEventHandler)genericHandler; handler(genericTarget, this); } private DependencyObject _targetElement; private bool _keepCurrentActive; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DiscoveryInnerClientManaged11.cs
- LineBreakRecord.cs
- listitem.cs
- TabItemWrapperAutomationPeer.cs
- StyleHelper.cs
- PriorityItem.cs
- UnsafeNativeMethods.cs
- HttpCapabilitiesEvaluator.cs
- DocumentReference.cs
- HtmlTable.cs
- Point4DValueSerializer.cs
- CompensationTokenData.cs
- PageRanges.cs
- IncrementalHitTester.cs
- Propagator.cs
- X509CertificateCollection.cs
- ConfigurationPropertyCollection.cs
- CodeSnippetExpression.cs
- NullableConverter.cs
- EventArgs.cs
- DependentList.cs
- CompositeFontFamily.cs
- MethodRental.cs
- DataListItem.cs
- Token.cs
- ResourceAssociationSetEnd.cs
- KeyMatchBuilder.cs
- FilterEventArgs.cs
- IdentityModelDictionary.cs
- SqlRecordBuffer.cs
- PerformanceCounter.cs
- DrawingImage.cs
- ChangeInterceptorAttribute.cs
- TraceContextEventArgs.cs
- ScaleTransform3D.cs
- BindingCollection.cs
- DocumentEventArgs.cs
- RegexBoyerMoore.cs
- DateTimeParse.cs
- Tuple.cs
- HandlerFactoryCache.cs
- ITreeGenerator.cs
- TemplateParser.cs
- SelectionEditor.cs
- PointLight.cs
- URLAttribute.cs
- CodeLinePragma.cs
- UniqueIdentifierService.cs
- XmlReader.cs
- FunctionGenerator.cs
- TemplateXamlParser.cs
- TimelineGroup.cs
- HtmlTernaryTree.cs
- CompileXomlTask.cs
- XPathNodePointer.cs
- CodeDomDecompiler.cs
- WizardStepBase.cs
- SystemFonts.cs
- XmlSchema.cs
- EdmItemError.cs
- DeclarativeCatalogPartDesigner.cs
- QuaternionValueSerializer.cs
- Literal.cs
- Compress.cs
- LinkConverter.cs
- RecordConverter.cs
- SecurityException.cs
- MouseActionConverter.cs
- TransformerInfoCollection.cs
- _ContextAwareResult.cs
- VersionedStreamOwner.cs
- UncommonField.cs
- LinqDataSourceDeleteEventArgs.cs
- SqlDataSourceStatusEventArgs.cs
- NonBatchDirectoryCompiler.cs
- RtfToXamlReader.cs
- StateWorkerRequest.cs
- UIElement3D.cs
- QueryComponents.cs
- RuntimeConfigLKG.cs
- OdbcInfoMessageEvent.cs
- EncoderExceptionFallback.cs
- XPathPatternBuilder.cs
- ProtectedConfigurationSection.cs
- HwndStylusInputProvider.cs
- AppDomainFactory.cs
- WorkflowDebuggerSteppingAttribute.cs
- MergeLocalizationDirectives.cs
- CapabilitiesSection.cs
- XsdDuration.cs
- ProfileSettingsCollection.cs
- DllNotFoundException.cs
- FrameworkRichTextComposition.cs
- OracleException.cs
- CompoundFileStorageReference.cs
- X509ChainElement.cs
- NavigationProperty.cs
- DataControlPagerLinkButton.cs
- Convert.cs
- SQLInt16Storage.cs