diff --git a/Source/NotifyIconWpf/TaskbarIcon.Declarations.cs b/Source/NotifyIconWpf/TaskbarIcon.Declarations.cs index 6d3a23d..2956ce4 100644 --- a/Source/NotifyIconWpf/TaskbarIcon.Declarations.cs +++ b/Source/NotifyIconWpf/TaskbarIcon.Declarations.cs @@ -22,7 +22,6 @@ // THIS COPYRIGHT NOTICE MAY NOT BE REMOVED FROM THIS FILE - using System; using System.ComponentModel; using System.Drawing; @@ -35,1841 +34,1847 @@ using Hardcodet.Wpf.TaskbarNotification.Interop; namespace Hardcodet.Wpf.TaskbarNotification { - /// - /// Contains declarations of WPF dependency properties - /// and events. - /// - partial class TaskbarIcon - { /// - /// Category name that is set on designer properties. - /// - public const string CategoryName = "NotifyIcon"; - - - //POPUP CONTROLS - - #region TrayPopupResolved - - /// - /// TrayPopupResolved Read-Only Dependency Property - /// - private static readonly DependencyPropertyKey TrayPopupResolvedPropertyKey - = DependencyProperty.RegisterReadOnly("TrayPopupResolved", typeof(Popup), typeof(TaskbarIcon), - new FrameworkPropertyMetadata(null)); - - - /// - /// A read-only dependency property that returns the - /// that is being displayed in the taskbar area based on a user action. - /// - public static readonly DependencyProperty TrayPopupResolvedProperty - = TrayPopupResolvedPropertyKey.DependencyProperty; - - /// - /// Gets the TrayPopupResolved property. Returns - /// a which is either the - /// control itself or a - /// control that contains the - /// . - /// - [Category(CategoryName)] - public Popup TrayPopupResolved - { - get { return (Popup)GetValue(TrayPopupResolvedProperty); } - } - - /// - /// Provides a secure method for setting the TrayPopupResolved property. - /// This dependency property indicates .... - /// - /// The new value for the property. - protected void SetTrayPopupResolved(Popup value) - { - SetValue(TrayPopupResolvedPropertyKey, value); - } - - #endregion - - #region TrayToolTipResolved - - /// - /// TrayToolTipResolved Read-Only Dependency Property - /// - private static readonly DependencyPropertyKey TrayToolTipResolvedPropertyKey - = DependencyProperty.RegisterReadOnly("TrayToolTipResolved", typeof(ToolTip), typeof(TaskbarIcon), - new FrameworkPropertyMetadata(null )); - - - /// - /// A read-only dependency property that returns the - /// that is being displayed. - /// - public static readonly DependencyProperty TrayToolTipResolvedProperty - = TrayToolTipResolvedPropertyKey.DependencyProperty; - - /// - /// Gets the TrayToolTipResolved property. Returns - /// a control that was created - /// in order to display either - /// or . - /// - [Category(CategoryName)] - [Browsable(true)] - [Bindable(true)] - public ToolTip TrayToolTipResolved - { - get { return (ToolTip)GetValue(TrayToolTipResolvedProperty); } - } - - /// - /// Provides a secure method for setting the - /// property. - /// - /// The new value for the property. - protected void SetTrayToolTipResolved(ToolTip value) - { - SetValue(TrayToolTipResolvedPropertyKey, value); - } - - #endregion - - #region CustomBalloon - - /// - /// CustomBalloon Read-Only Dependency Property - /// - private static readonly DependencyPropertyKey CustomBalloonPropertyKey - = DependencyProperty.RegisterReadOnly("CustomBalloon", typeof(Popup), typeof(TaskbarIcon), - new FrameworkPropertyMetadata(null)); - - public static readonly DependencyProperty CustomBalloonProperty - = CustomBalloonPropertyKey.DependencyProperty; - - /// - /// A custom popup that is being displayed in the tray area in order - /// to display messages to the user. - /// - public Popup CustomBalloon - { - get { return (Popup)GetValue(CustomBalloonProperty); } - } - - /// - /// Provides a secure method for setting the property. - /// - /// The new value for the property. - protected void SetCustomBalloon(Popup value) - { - SetValue(CustomBalloonPropertyKey, value); - } - - #endregion - - - - //DEPENDENCY PROPERTIES - - #region Icon property / IconSource dependency property - - private Icon icon; - - /// - /// Gets or sets the icon to be displayed. This is not a - /// dependency property - if you want to assign the property - /// through XAML, please use the - /// dependency property. - /// - [Browsable(false)] - public Icon Icon - { - get { return icon; } - set - { - icon = value; - iconData.IconHandle = value == null ? IntPtr.Zero : icon.Handle; - - Util.WriteIconData(ref iconData, NotifyCommand.Modify, IconDataMembers.Icon); - } - } - - - /// - /// Resolves an image source and updates the property accordingly. - /// - public static readonly DependencyProperty IconSourceProperty = - DependencyProperty.Register("IconSource", - typeof(ImageSource), - typeof(TaskbarIcon), - new FrameworkPropertyMetadata(null, IconSourcePropertyChanged)); - - /// - /// A property wrapper for the - /// dependency property:
- /// Resolves an image source and updates the property accordingly. - ///
- [Category(CategoryName)] - [Description("Sets the displayed taskbar icon.")] - public ImageSource IconSource - { - get { return (ImageSource)GetValue(IconSourceProperty); } - set { SetValue(IconSourceProperty, value); } - } - - - /// - /// A static callback listener which is being invoked if the - /// dependency property has - /// been changed. Invokes the - /// instance method of the changed instance. - /// - /// The currently processed owner of the property. - /// Provides information about the updated property. - private static void IconSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - TaskbarIcon owner = (TaskbarIcon)d; - owner.OnIconSourcePropertyChanged(e); - } - - - /// - /// Handles changes of the dependency property. As - /// WPF internally uses the dependency property system and bypasses the - /// property wrapper, updates of the property's value - /// should be handled here. - /// Provides information about the updated property. - private void OnIconSourcePropertyChanged(DependencyPropertyChangedEventArgs e) - { - ImageSource newValue = (ImageSource)e.NewValue; - - //resolving the ImageSource at design time is unlikely to work - if (!Util.IsDesignMode) Icon = newValue.ToIcon(); - } - - #endregion - - #region ToolTipText dependency property - - /// - /// A tooltip text that is being displayed if no custom - /// was set or if custom tooltips are not supported. - /// - public static readonly DependencyProperty ToolTipTextProperty = - DependencyProperty.Register("ToolTipText", - typeof (string), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(String.Empty, ToolTipTextPropertyChanged)); - - - /// - /// A property wrapper for the - /// dependency property:
- /// A tooltip text that is being displayed if no custom - /// was set or if custom tooltips are not supported. - ///
- [Category(CategoryName)] - [Description("Alternative to a fully blown ToolTip, which is only displayed on Vista and above.")] - public string ToolTipText - { - get { return (string) GetValue(ToolTipTextProperty); } - set { SetValue(ToolTipTextProperty, value); } - } - - - /// - /// A static callback listener which is being invoked if the - /// dependency property has - /// been changed. Invokes the - /// instance method of the changed instance. - /// - /// The currently processed owner of the property. - /// Provides information about the updated property. - private static void ToolTipTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - TaskbarIcon owner = (TaskbarIcon) d; - owner.OnToolTipTextPropertyChanged(e); - } - - - /// - /// Handles changes of the dependency property. As - /// WPF internally uses the dependency property system and bypasses the - /// property wrapper, updates of the property's value - /// should be handled here. - /// Provides information about the updated property. - private void OnToolTipTextPropertyChanged(DependencyPropertyChangedEventArgs e) - { - //only recreate tooltip if we're not using a custom control - if (TrayToolTipResolved == null || TrayToolTipResolved.Content is string) - { - CreateCustomToolTip(); - } - - WriteToolTipSettings(); - } - - #endregion - - #region TrayToolTip dependency property - - /// - /// A custom UI element that is displayed as a tooltip if the user hovers over the taskbar icon. - /// Works only with Vista and above. Accordingly, you should make sure that - /// the property is set as well. - /// - public static readonly DependencyProperty TrayToolTipProperty = - DependencyProperty.Register("TrayToolTip", - typeof (UIElement), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(null, TrayToolTipPropertyChanged)); - - /// - /// A property wrapper for the - /// dependency property:
- /// A custom UI element that is displayed as a tooltip if the user hovers over the taskbar icon. - /// Works only with Vista and above. Accordingly, you should make sure that - /// the property is set as well. - ///
- [Category(CategoryName)] - [Description("Custom UI element that is displayed as a tooltip. Only on Vista and above")] - public UIElement TrayToolTip - { - get { return (UIElement) GetValue(TrayToolTipProperty); } - set { SetValue(TrayToolTipProperty, value); } - } - - - /// - /// A static callback listener which is being invoked if the - /// dependency property has - /// been changed. Invokes the - /// instance method of the changed instance. - /// - /// The currently processed owner of the property. - /// Provides information about the updated property. - private static void TrayToolTipPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - TaskbarIcon owner = (TaskbarIcon) d; - owner.OnTrayToolTipPropertyChanged(e); - } - - - /// - /// Handles changes of the dependency property. As - /// WPF internally uses the dependency property system and bypasses the - /// property wrapper, updates of the property's value - /// should be handled here. - /// Provides information about the updated property. - private void OnTrayToolTipPropertyChanged(DependencyPropertyChangedEventArgs e) - { - //recreate tooltip control - CreateCustomToolTip(); - - if (e.OldValue != null) - { - //remove the taskbar icon reference from the previously used element - SetParentTaskbarIcon((DependencyObject) e.OldValue, null); - } - - - if (e.NewValue != null) - { - //set this taskbar icon as a reference to the new tooltip element - SetParentTaskbarIcon((DependencyObject) e.NewValue, this); - } - - - //update tooltip settings - needed to make sure a string is set, even - //if the ToolTipText property is not set. Otherwise, the event that - //triggers tooltip display is never fired. - WriteToolTipSettings(); - } - - #endregion - - #region TrayPopup dependency property - - /// - /// A control that is displayed as a popup when the taskbar icon is clicked. - /// - public static readonly DependencyProperty TrayPopupProperty = - DependencyProperty.Register("TrayPopup", - typeof(UIElement), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(null, TrayPopupPropertyChanged)); - - /// - /// A property wrapper for the - /// dependency property:
- /// A control that is displayed as a popup when the taskbar icon is clicked. - ///
- [Category(CategoryName)] - [Description("Displayed as a Popup if the user clicks on the taskbar icon.")] - public UIElement TrayPopup - { - get { return (UIElement)GetValue(TrayPopupProperty); } - set { SetValue(TrayPopupProperty, value); } - } - - - /// - /// A static callback listener which is being invoked if the - /// dependency property has - /// been changed. Invokes the - /// instance method of the changed instance. - /// - /// The currently processed owner of the property. - /// Provides information about the updated property. - private static void TrayPopupPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - TaskbarIcon owner = (TaskbarIcon) d; - owner.OnTrayPopupPropertyChanged(e); - } - - - /// - /// Handles changes of the dependency property. As - /// WPF internally uses the dependency property system and bypasses the - /// property wrapper, updates of the property's value - /// should be handled here. - /// Provides information about the updated property. - private void OnTrayPopupPropertyChanged(DependencyPropertyChangedEventArgs e) - { - if (e.OldValue != null) - { - //remove the taskbar icon reference from the previously used element - SetParentTaskbarIcon((DependencyObject)e.OldValue, null); - } - - - if (e.NewValue != null) - { - //set this taskbar icon as a reference to the new tooltip element - SetParentTaskbarIcon((DependencyObject)e.NewValue, this); - } - - //create a pop - CreatePopup(); - } - - #endregion - - - #region MenuActivation dependency property - - /// - /// Defines what mouse events display the context menu. - /// Defaults to . - /// - public static readonly DependencyProperty MenuActivationProperty = - DependencyProperty.Register("MenuActivation", - typeof (PopupActivationMode), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(PopupActivationMode.RightClick)); - - /// - /// A property wrapper for the - /// dependency property:
- /// Defines what mouse events display the context menu. - /// Defaults to . - ///
- [Category(CategoryName)] - [Description("Defines what mouse events display the context menu.")] - public PopupActivationMode MenuActivation - { - get { return (PopupActivationMode) GetValue(MenuActivationProperty); } - set { SetValue(MenuActivationProperty, value); } - } - - #endregion - - #region PopupActivation dependency property - - /// - /// Defines what mouse events trigger the . - /// Default is . - /// - public static readonly DependencyProperty PopupActivationProperty = - DependencyProperty.Register("PopupActivation", - typeof (PopupActivationMode), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(PopupActivationMode.LeftClick)); - - /// - /// A property wrapper for the - /// dependency property:
- /// Defines what mouse events trigger the . - /// Default is . - ///
- [Category(CategoryName)] - [Description("Defines what mouse events display the TaskbarIconPopup.")] - public PopupActivationMode PopupActivation - { - get { return (PopupActivationMode) GetValue(PopupActivationProperty); } - set { SetValue(PopupActivationProperty, value); } - } - - #endregion - - - #region Visibility dependency property override - - /// - /// A static callback listener which is being invoked if the - /// dependency property has - /// been changed. Invokes the - /// instance method of the changed instance. - /// - /// The currently processed owner of the property. - /// Provides information about the updated property. - private static void VisibilityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - TaskbarIcon owner = (TaskbarIcon) d; - owner.OnVisibilityPropertyChanged(e); - } - - - /// - /// Handles changes of the dependency property. As - /// WPF internally uses the dependency property system and bypasses the - /// property wrapper, updates of the property's value - /// should be handled here. - /// Provides information about the updated property. - private void OnVisibilityPropertyChanged(DependencyPropertyChangedEventArgs e) - { - Visibility newValue = (Visibility) e.NewValue; - - //update - if (newValue == Visibility.Visible) - { - CreateTaskbarIcon(); - } - else - { - RemoveTaskbarIcon(); - } - } - - #endregion - - #region DataContext dependency property override / target update - - /// - /// Updates the of a given - /// . This method only updates target elements - /// that do not already have a data context of their own, and either assigns - /// the of the NotifyIcon, or the - /// NotifyIcon itself, if no data context was assigned at all. - /// - private void UpdateDataContext(FrameworkElement target, object oldDataContextValue, object newDataContextValue) - { - //if there is no target or it's data context is determined through a binding - //of its own, keep it - if (target == null || target.IsDataContextDataBound()) return; - - //if the target's data context is the NotifyIcon's old DataContext or the NotifyIcon itself, - //update it - if (ReferenceEquals(this, target.DataContext) || Equals(oldDataContextValue, target.DataContext)) - { - //assign own data context, if available. If there is no data - //context at all, assign NotifyIcon itself. - target.DataContext = newDataContextValue ?? this; - } - } - - /// - /// A static callback listener which is being invoked if the - /// dependency property has - /// been changed. Invokes the - /// instance method of the changed instance. - /// - /// The currently processed owner of the property. - /// Provides information about the updated property. - private static void DataContextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - TaskbarIcon owner = (TaskbarIcon) d; - owner.OnDataContextPropertyChanged(e); - } - - - /// - /// Handles changes of the dependency property. As - /// WPF internally uses the dependency property system and bypasses the - /// property wrapper, updates of the property's value - /// should be handled here. - /// Provides information about the updated property. - private void OnDataContextPropertyChanged(DependencyPropertyChangedEventArgs e) - { - object newValue = e.NewValue; - object oldValue = e.OldValue; - - //replace custom data context for ToolTips, Popup, and - //ContextMenu - UpdateDataContext(TrayPopupResolved, oldValue, newValue); - UpdateDataContext(TrayToolTipResolved, oldValue, newValue); - UpdateDataContext(ContextMenu, oldValue, newValue); - } - - #endregion - - #region ContextMenu dependency property override - - /// - /// A static callback listener which is being invoked if the - /// dependency property has - /// been changed. Invokes the - /// instance method of the changed instance. - /// - /// The currently processed owner of the property. - /// Provides information about the updated property. - private static void ContextMenuPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) - { - TaskbarIcon owner = (TaskbarIcon)d; - owner.OnContextMenuPropertyChanged(e); - } - - - /// - /// Releases the old and updates the new property - /// in order to reflect both the NotifyIcon's - /// property and have the assigned. - /// - /// Provides information about the updated property. - private void OnContextMenuPropertyChanged(DependencyPropertyChangedEventArgs e) - { - if (e.OldValue != null) - { - //remove the taskbar icon reference from the previously used element - SetParentTaskbarIcon((DependencyObject)e.OldValue, null); - } - - if (e.NewValue != null) - { - //set this taskbar icon as a reference to the new tooltip element - SetParentTaskbarIcon((DependencyObject)e.NewValue, this); - } - - UpdateDataContext((ContextMenu) e.NewValue, null, DataContext); - } - - #endregion - - - - #region DoubleClickCommand dependency property - - /// - /// Associates a command that is being executed if the tray icon is being - /// double clicked. - /// - public static readonly DependencyProperty DoubleClickCommandProperty = - DependencyProperty.Register("DoubleClickCommand", - typeof (ICommand), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(null)); - - /// - /// A property wrapper for the - /// dependency property:
- /// Associates a command that is being executed if the tray icon is being - /// double clicked. - ///
- public ICommand DoubleClickCommand - { - get { return (ICommand) GetValue(DoubleClickCommandProperty); } - set { SetValue(DoubleClickCommandProperty, value); } - } - - #endregion - - #region DoubleClickCommandParameter dependency property - - /// - /// Command parameter for the . - /// - public static readonly DependencyProperty DoubleClickCommandParameterProperty = - DependencyProperty.Register("DoubleClickCommandParameter", - typeof (object), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(null)); - - /// - /// A property wrapper for the - /// dependency property:
- /// Command parameter for the . - ///
- public object DoubleClickCommandParameter - { - get { return GetValue(DoubleClickCommandParameterProperty); } - set { SetValue(DoubleClickCommandParameterProperty, value); } - } - - #endregion - - #region DoubleClickCommandTarget dependency property - - /// - /// The target of the command that is fired if the notify icon is double clicked. - /// - public static readonly DependencyProperty DoubleClickCommandTargetProperty = - DependencyProperty.Register("DoubleClickCommandTarget", - typeof (IInputElement), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(null)); - - /// - /// A property wrapper for the - /// dependency property:
- /// The target of the command that is fired if the notify icon is double clicked. - ///
- public IInputElement DoubleClickCommandTarget - { - get { return (IInputElement) GetValue(DoubleClickCommandTargetProperty); } - set { SetValue(DoubleClickCommandTargetProperty, value); } - } - - #endregion - - - - #region LeftClickCommand dependency property - - /// - /// Associates a command that is being executed if the tray icon is being - /// double clicked. - /// - public static readonly DependencyProperty LeftClickCommandProperty = - DependencyProperty.Register("LeftClickCommand", - typeof (ICommand), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(null)); - - /// - /// A property wrapper for the - /// dependency property:
- /// Associates a command that is being executed if the tray icon is being - /// double clicked. - ///
- public ICommand LeftClickCommand - { - get { return (ICommand) GetValue(LeftClickCommandProperty); } - set { SetValue(LeftClickCommandProperty, value); } - } - - #endregion - - #region LeftClickCommandParameter dependency property - - /// - /// Command parameter for the . - /// - public static readonly DependencyProperty LeftClickCommandParameterProperty = - DependencyProperty.Register("LeftClickCommandParameter", - typeof (object), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(null)); - - /// - /// A property wrapper for the - /// dependency property:
- /// Command parameter for the . - ///
- public object LeftClickCommandParameter - { - get { return GetValue(LeftClickCommandParameterProperty); } - set { SetValue(LeftClickCommandParameterProperty, value); } - } - - #endregion - - #region LeftClickCommandTarget dependency property - - /// - /// The target of the command that is fired if the notify icon is clicked. - /// - public static readonly DependencyProperty LeftClickCommandTargetProperty = - DependencyProperty.Register("LeftClickCommandTarget", - typeof (IInputElement), - typeof (TaskbarIcon), - new FrameworkPropertyMetadata(null)); - - /// - /// A property wrapper for the - /// dependency property:
- /// The target of the command that is fired if the notify icon is clicked. - ///
- public IInputElement LeftClickCommandTarget - { - get { return (IInputElement) GetValue(LeftClickCommandTargetProperty); } - set { SetValue(LeftClickCommandTargetProperty, value); } - } - - #endregion - - - - //EVENTS - - #region TrayLeftMouseDown - - /// - /// TrayLeftMouseDown Routed Event - /// - public static readonly RoutedEvent TrayLeftMouseDownEvent = EventManager.RegisterRoutedEvent("TrayLeftMouseDown", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when the user presses the left mouse button. - /// - [Category(CategoryName)] - public event RoutedEventHandler TrayLeftMouseDown - { - add { AddHandler(TrayLeftMouseDownEvent, value); } - remove { RemoveHandler(TrayLeftMouseDownEvent, value); } - } - - /// - /// A helper method to raise the TrayLeftMouseDown event. - /// - protected RoutedEventArgs RaiseTrayLeftMouseDownEvent() - { - RoutedEventArgs args = RaiseTrayLeftMouseDownEvent(this); - return args; - } - - /// - /// A static helper method to raise the TrayLeftMouseDown event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayLeftMouseDownEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayLeftMouseDownEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region TrayRightMouseDown - - /// - /// TrayRightMouseDown Routed Event - /// - public static readonly RoutedEvent TrayRightMouseDownEvent = EventManager.RegisterRoutedEvent("TrayRightMouseDown", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when the presses the right mouse button. - /// - public event RoutedEventHandler TrayRightMouseDown - { - add { AddHandler(TrayRightMouseDownEvent, value); } - remove { RemoveHandler(TrayRightMouseDownEvent, value); } - } - - /// - /// A helper method to raise the TrayRightMouseDown event. - /// - protected RoutedEventArgs RaiseTrayRightMouseDownEvent() - { - return RaiseTrayRightMouseDownEvent(this); - } - - /// - /// A static helper method to raise the TrayRightMouseDown event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayRightMouseDownEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayRightMouseDownEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region TrayMiddleMouseDown - - /// - /// TrayMiddleMouseDown Routed Event - /// - public static readonly RoutedEvent TrayMiddleMouseDownEvent = EventManager.RegisterRoutedEvent("TrayMiddleMouseDown", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when the user presses the middle mouse button. - /// - public event RoutedEventHandler TrayMiddleMouseDown - { - add { AddHandler(TrayMiddleMouseDownEvent, value); } - remove { RemoveHandler(TrayMiddleMouseDownEvent, value); } - } - - /// - /// A helper method to raise the TrayMiddleMouseDown event. - /// - protected RoutedEventArgs RaiseTrayMiddleMouseDownEvent() - { - return RaiseTrayMiddleMouseDownEvent(this); - } - - /// - /// A static helper method to raise the TrayMiddleMouseDown event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayMiddleMouseDownEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayMiddleMouseDownEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - - #region TrayLeftMouseUp - - /// - /// TrayLeftMouseUp Routed Event - /// - public static readonly RoutedEvent TrayLeftMouseUpEvent = EventManager.RegisterRoutedEvent("TrayLeftMouseUp", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when the user releases the left mouse button. - /// - public event RoutedEventHandler TrayLeftMouseUp - { - add { AddHandler(TrayLeftMouseUpEvent, value); } - remove { RemoveHandler(TrayLeftMouseUpEvent, value); } - } - - /// - /// A helper method to raise the TrayLeftMouseUp event. - /// - protected RoutedEventArgs RaiseTrayLeftMouseUpEvent() - { - return RaiseTrayLeftMouseUpEvent(this); - } - - /// - /// A static helper method to raise the TrayLeftMouseUp event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayLeftMouseUpEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayLeftMouseUpEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region TrayRightMouseUp - - /// - /// TrayRightMouseUp Routed Event - /// - public static readonly RoutedEvent TrayRightMouseUpEvent = EventManager.RegisterRoutedEvent("TrayRightMouseUp", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when the user releases the right mouse button. - /// - public event RoutedEventHandler TrayRightMouseUp - { - add { AddHandler(TrayRightMouseUpEvent, value); } - remove { RemoveHandler(TrayRightMouseUpEvent, value); } - } - - /// - /// A helper method to raise the TrayRightMouseUp event. - /// - protected RoutedEventArgs RaiseTrayRightMouseUpEvent() - { - return RaiseTrayRightMouseUpEvent(this); - } - - /// - /// A static helper method to raise the TrayRightMouseUp event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayRightMouseUpEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayRightMouseUpEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region TrayMiddleMouseUp - - /// - /// TrayMiddleMouseUp Routed Event - /// - public static readonly RoutedEvent TrayMiddleMouseUpEvent = EventManager.RegisterRoutedEvent("TrayMiddleMouseUp", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when the user releases the middle mouse button. - /// - public event RoutedEventHandler TrayMiddleMouseUp - { - add { AddHandler(TrayMiddleMouseUpEvent, value); } - remove { RemoveHandler(TrayMiddleMouseUpEvent, value); } - } - - /// - /// A helper method to raise the TrayMiddleMouseUp event. - /// - protected RoutedEventArgs RaiseTrayMiddleMouseUpEvent() - { - return RaiseTrayMiddleMouseUpEvent(this); - } - - /// - /// A static helper method to raise the TrayMiddleMouseUp event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayMiddleMouseUpEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayMiddleMouseUpEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - - #region TrayMouseDoubleClick - - /// - /// TrayMouseDoubleClick Routed Event - /// - public static readonly RoutedEvent TrayMouseDoubleClickEvent = EventManager.RegisterRoutedEvent("TrayMouseDoubleClick", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when the user double-clicks the taskbar icon. - /// - public event RoutedEventHandler TrayMouseDoubleClick - { - add { AddHandler(TrayMouseDoubleClickEvent, value); } - remove { RemoveHandler(TrayMouseDoubleClickEvent, value); } - } - - /// - /// A helper method to raise the TrayMouseDoubleClick event. - /// - protected RoutedEventArgs RaiseTrayMouseDoubleClickEvent() - { - RoutedEventArgs args = RaiseTrayMouseDoubleClickEvent(this); - DoubleClickCommand.ExecuteIfEnabled(DoubleClickCommandParameter, DoubleClickCommandTarget ?? this); - return args; - } - - /// - /// A static helper method to raise the TrayMouseDoubleClick event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayMouseDoubleClickEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayMouseDoubleClickEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region TrayMouseMove - - /// - /// TrayMouseMove Routed Event - /// - public static readonly RoutedEvent TrayMouseMoveEvent = EventManager.RegisterRoutedEvent("TrayMouseMove", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when the user moves the mouse over the taskbar icon. - /// - public event RoutedEventHandler TrayMouseMove - { - add { AddHandler(TrayMouseMoveEvent, value); } - remove { RemoveHandler(TrayMouseMoveEvent, value); } - } - - /// - /// A helper method to raise the TrayMouseMove event. - /// - protected RoutedEventArgs RaiseTrayMouseMoveEvent() - { - return RaiseTrayMouseMoveEvent(this); - } - - /// - /// A static helper method to raise the TrayMouseMove event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayMouseMoveEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayMouseMoveEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - - #region TrayBalloonTipShown - - /// - /// TrayBalloonTipShown Routed Event - /// - public static readonly RoutedEvent TrayBalloonTipShownEvent = EventManager.RegisterRoutedEvent("TrayBalloonTipShown", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when a balloon ToolTip is displayed. - /// - public event RoutedEventHandler TrayBalloonTipShown - { - add { AddHandler(TrayBalloonTipShownEvent, value); } - remove { RemoveHandler(TrayBalloonTipShownEvent, value); } - } - - /// - /// A helper method to raise the TrayBalloonTipShown event. - /// - protected RoutedEventArgs RaiseTrayBalloonTipShownEvent() - { - return RaiseTrayBalloonTipShownEvent(this); - } - - /// - /// A static helper method to raise the TrayBalloonTipShown event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayBalloonTipShownEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayBalloonTipShownEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region TrayBalloonTipClosed - - /// - /// TrayBalloonTipClosed Routed Event - /// - public static readonly RoutedEvent TrayBalloonTipClosedEvent = EventManager.RegisterRoutedEvent("TrayBalloonTipClosed", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when a balloon ToolTip was closed. - /// - public event RoutedEventHandler TrayBalloonTipClosed - { - add { AddHandler(TrayBalloonTipClosedEvent, value); } - remove { RemoveHandler(TrayBalloonTipClosedEvent, value); } - } - - /// - /// A helper method to raise the TrayBalloonTipClosed event. - /// - protected RoutedEventArgs RaiseTrayBalloonTipClosedEvent() - { - return RaiseTrayBalloonTipClosedEvent(this); - } - - /// - /// A static helper method to raise the TrayBalloonTipClosed event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayBalloonTipClosedEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayBalloonTipClosedEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region TrayBalloonTipClicked - - /// - /// TrayBalloonTipClicked Routed Event - /// - public static readonly RoutedEvent TrayBalloonTipClickedEvent = EventManager.RegisterRoutedEvent("TrayBalloonTipClicked", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Occurs when the user clicks on a balloon ToolTip. - /// - public event RoutedEventHandler TrayBalloonTipClicked - { - add { AddHandler(TrayBalloonTipClickedEvent, value); } - remove { RemoveHandler(TrayBalloonTipClickedEvent, value); } - } - - /// - /// A helper method to raise the TrayBalloonTipClicked event. - /// - protected RoutedEventArgs RaiseTrayBalloonTipClickedEvent() - { - return RaiseTrayBalloonTipClickedEvent(this); - } - - /// - /// A static helper method to raise the TrayBalloonTipClicked event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayBalloonTipClickedEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayBalloonTipClickedEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - - #region TrayContextMenuOpen (and PreviewTrayContextMenuOpen) - - /// - /// TrayContextMenuOpen Routed Event - /// - public static readonly RoutedEvent TrayContextMenuOpenEvent = EventManager.RegisterRoutedEvent("TrayContextMenuOpen", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Bubbled event that occurs when the context menu of the taskbar icon is being displayed. - /// - public event RoutedEventHandler TrayContextMenuOpen - { - add { AddHandler(TrayContextMenuOpenEvent, value); } - remove { RemoveHandler(TrayContextMenuOpenEvent, value); } - } - - /// - /// A helper method to raise the TrayContextMenuOpen event. - /// - protected RoutedEventArgs RaiseTrayContextMenuOpenEvent() - { - return RaiseTrayContextMenuOpenEvent(this); - } - - /// - /// A static helper method to raise the TrayContextMenuOpen event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayContextMenuOpenEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayContextMenuOpenEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - /// - /// PreviewTrayContextMenuOpen Routed Event - /// - public static readonly RoutedEvent PreviewTrayContextMenuOpenEvent = EventManager.RegisterRoutedEvent("PreviewTrayContextMenuOpen", - RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Tunneled event that occurs when the context menu of the taskbar icon is being displayed. - /// - public event RoutedEventHandler PreviewTrayContextMenuOpen - { - add { AddHandler(PreviewTrayContextMenuOpenEvent, value); } - remove { RemoveHandler(PreviewTrayContextMenuOpenEvent, value); } - } - - /// - /// A helper method to raise the PreviewTrayContextMenuOpen event. - /// - protected RoutedEventArgs RaisePreviewTrayContextMenuOpenEvent() - { - return RaisePreviewTrayContextMenuOpenEvent(this); - } - - /// - /// A static helper method to raise the PreviewTrayContextMenuOpen event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaisePreviewTrayContextMenuOpenEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = PreviewTrayContextMenuOpenEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region TrayPopupOpen (and PreviewTrayPopupOpen) - - /// - /// TrayPopupOpen Routed Event - /// - public static readonly RoutedEvent TrayPopupOpenEvent = EventManager.RegisterRoutedEvent("TrayPopupOpen", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Bubbled event that occurs when the custom popup is being opened. - /// - public event RoutedEventHandler TrayPopupOpen - { - add { AddHandler(TrayPopupOpenEvent, value); } - remove { RemoveHandler(TrayPopupOpenEvent, value); } - } - - /// - /// A helper method to raise the TrayPopupOpen event. - /// - protected RoutedEventArgs RaiseTrayPopupOpenEvent() - { - return RaiseTrayPopupOpenEvent(this); - } - - /// - /// A static helper method to raise the TrayPopupOpen event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayPopupOpenEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayPopupOpenEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - /// - /// PreviewTrayPopupOpen Routed Event - /// - public static readonly RoutedEvent PreviewTrayPopupOpenEvent = EventManager.RegisterRoutedEvent("PreviewTrayPopupOpen", - RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Tunneled event that occurs when the custom popup is being opened. - /// - public event RoutedEventHandler PreviewTrayPopupOpen - { - add { AddHandler(PreviewTrayPopupOpenEvent, value); } - remove { RemoveHandler(PreviewTrayPopupOpenEvent, value); } - } - - /// - /// A helper method to raise the PreviewTrayPopupOpen event. - /// - protected RoutedEventArgs RaisePreviewTrayPopupOpenEvent() - { - return RaisePreviewTrayPopupOpenEvent(this); - } - - /// - /// A static helper method to raise the PreviewTrayPopupOpen event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaisePreviewTrayPopupOpenEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = PreviewTrayPopupOpenEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - - #region TrayToolTipOpen (and PreviewTrayToolTipOpen) - - /// - /// TrayToolTipOpen Routed Event - /// - public static readonly RoutedEvent TrayToolTipOpenEvent = EventManager.RegisterRoutedEvent("TrayToolTipOpen", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Bubbled event that occurs when the custom ToolTip is being displayed. - /// - public event RoutedEventHandler TrayToolTipOpen - { - add { AddHandler(TrayToolTipOpenEvent, value); } - remove { RemoveHandler(TrayToolTipOpenEvent, value); } - } - - /// - /// A helper method to raise the TrayToolTipOpen event. - /// - protected RoutedEventArgs RaiseTrayToolTipOpenEvent() - { - return RaiseTrayToolTipOpenEvent(this); - } - - /// - /// A static helper method to raise the TrayToolTipOpen event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayToolTipOpenEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayToolTipOpenEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - /// - /// PreviewTrayToolTipOpen Routed Event - /// - public static readonly RoutedEvent PreviewTrayToolTipOpenEvent = EventManager.RegisterRoutedEvent("PreviewTrayToolTipOpen", - RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Tunneled event that occurs when the custom ToolTip is being displayed. - /// - public event RoutedEventHandler PreviewTrayToolTipOpen - { - add { AddHandler(PreviewTrayToolTipOpenEvent, value); } - remove { RemoveHandler(PreviewTrayToolTipOpenEvent, value); } - } - - /// - /// A helper method to raise the PreviewTrayToolTipOpen event. - /// - protected RoutedEventArgs RaisePreviewTrayToolTipOpenEvent() - { - return RaisePreviewTrayToolTipOpenEvent(this); - } - - /// - /// A static helper method to raise the PreviewTrayToolTipOpen event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaisePreviewTrayToolTipOpenEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = PreviewTrayToolTipOpenEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region TrayToolTipClose (and PreviewTrayToolTipClose) - - /// - /// TrayToolTipClose Routed Event - /// - public static readonly RoutedEvent TrayToolTipCloseEvent = EventManager.RegisterRoutedEvent("TrayToolTipClose", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Bubbled event that occurs when a custom tooltip is being closed. - /// - public event RoutedEventHandler TrayToolTipClose - { - add { AddHandler(TrayToolTipCloseEvent, value); } - remove { RemoveHandler(TrayToolTipCloseEvent, value); } - } - - /// - /// A helper method to raise the TrayToolTipClose event. - /// - protected RoutedEventArgs RaiseTrayToolTipCloseEvent() - { - return RaiseTrayToolTipCloseEvent(this); - } - - /// - /// A static helper method to raise the TrayToolTipClose event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseTrayToolTipCloseEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = TrayToolTipCloseEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - /// - /// PreviewTrayToolTipClose Routed Event - /// - public static readonly RoutedEvent PreviewTrayToolTipCloseEvent = EventManager.RegisterRoutedEvent("PreviewTrayToolTipClose", - RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Tunneled event that occurs when a custom tooltip is being closed. - /// - public event RoutedEventHandler PreviewTrayToolTipClose - { - add { AddHandler(PreviewTrayToolTipCloseEvent, value); } - remove { RemoveHandler(PreviewTrayToolTipCloseEvent, value); } - } - - /// - /// A helper method to raise the PreviewTrayToolTipClose event. - /// - protected RoutedEventArgs RaisePreviewTrayToolTipCloseEvent() - { - return RaisePreviewTrayToolTipCloseEvent(this); - } - - /// - /// A static helper method to raise the PreviewTrayToolTipClose event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaisePreviewTrayToolTipCloseEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = PreviewTrayToolTipCloseEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - - //ATTACHED EVENTS - - #region PopupOpened - - /// - /// PopupOpened Attached Routed Event - /// - public static readonly RoutedEvent PopupOpenedEvent = EventManager.RegisterRoutedEvent("PopupOpened", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Adds a handler for the PopupOpened attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be added - public static void AddPopupOpenedHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.AddHandler(element, PopupOpenedEvent, handler); - } - - /// - /// Removes a handler for the PopupOpened attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be removed - public static void RemovePopupOpenedHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.RemoveHandler(element, PopupOpenedEvent, handler); - } - - /// - /// A static helper method to raise the PopupOpened event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaisePopupOpenedEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = PopupOpenedEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region ToolTipOpened - - /// - /// ToolTipOpened Attached Routed Event - /// - public static readonly RoutedEvent ToolTipOpenedEvent = EventManager.RegisterRoutedEvent("ToolTipOpened", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Adds a handler for the ToolTipOpened attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be added - public static void AddToolTipOpenedHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.AddHandler(element, ToolTipOpenedEvent, handler); - } - - /// - /// Removes a handler for the ToolTipOpened attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be removed - public static void RemoveToolTipOpenedHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.RemoveHandler(element, ToolTipOpenedEvent, handler); - } - - /// - /// A static helper method to raise the ToolTipOpened event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseToolTipOpenedEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = ToolTipOpenedEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region ToolTipClose - - /// - /// ToolTipClose Attached Routed Event - /// - public static readonly RoutedEvent ToolTipCloseEvent = EventManager.RegisterRoutedEvent("ToolTipClose", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Adds a handler for the ToolTipClose attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be added - public static void AddToolTipCloseHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.AddHandler(element, ToolTipCloseEvent, handler); - } - - /// - /// Removes a handler for the ToolTipClose attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be removed - public static void RemoveToolTipCloseHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.RemoveHandler(element, ToolTipCloseEvent, handler); - } - - /// - /// A static helper method to raise the ToolTipClose event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - internal static RoutedEventArgs RaiseToolTipCloseEvent(DependencyObject target) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(); - args.RoutedEvent = ToolTipCloseEvent; - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region BalloonShowing - - /// - /// BalloonShowing Attached Routed Event - /// - public static readonly RoutedEvent BalloonShowingEvent = EventManager.RegisterRoutedEvent("BalloonShowing", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Adds a handler for the BalloonShowing attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be added - public static void AddBalloonShowingHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.AddHandler(element, BalloonShowingEvent, handler); - } - - /// - /// Removes a handler for the BalloonShowing attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be removed - public static void RemoveBalloonShowingHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.RemoveHandler(element, BalloonShowingEvent, handler); - } - - /// - /// A static helper method to raise the BalloonShowing event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - /// The instance that manages the balloon. - internal static RoutedEventArgs RaiseBalloonShowingEvent(DependencyObject target, TaskbarIcon source) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(BalloonShowingEvent, source); - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - #region BalloonClosing - - /// - /// BalloonClosing Attached Routed Event - /// - public static readonly RoutedEvent BalloonClosingEvent = EventManager.RegisterRoutedEvent("BalloonClosing", - RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TaskbarIcon)); - - /// - /// Adds a handler for the BalloonClosing attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be added - public static void AddBalloonClosingHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.AddHandler(element, BalloonClosingEvent, handler); - } - - /// - /// Removes a handler for the BalloonClosing attached event - /// - /// UIElement or ContentElement that listens to the event - /// Event handler to be removed - public static void RemoveBalloonClosingHandler(DependencyObject element, RoutedEventHandler handler) - { - RoutedEventHelper.RemoveHandler(element, BalloonClosingEvent, handler); - } - - /// - /// A static helper method to raise the BalloonClosing event on a target element. - /// - /// UIElement or ContentElement on which to raise the event - /// The instance that manages the balloon. - internal static RoutedEventArgs RaiseBalloonClosingEvent(DependencyObject target, TaskbarIcon source) - { - if (target == null) return null; - - RoutedEventArgs args = new RoutedEventArgs(BalloonClosingEvent, source); - RoutedEventHelper.RaiseEvent(target, args); - return args; - } - - #endregion - - - - //ATTACHED PROPERTIES - - #region ParentTaskbarIcon - - /// - /// An attached property that is assigned to displayed UI elements (balloos, tooltips, context menus), and - /// that can be used to bind to this control. The attached property is being derived, so binding is - /// quite straightforward: - /// - /// - /// - /// - public static readonly DependencyProperty ParentTaskbarIconProperty = - DependencyProperty.RegisterAttached("ParentTaskbarIcon", typeof (TaskbarIcon), typeof (TaskbarIcon), - new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits)); - - /// - /// Gets the ParentTaskbarIcon property. This dependency property - /// indicates .... - /// - public static TaskbarIcon GetParentTaskbarIcon(DependencyObject d) - { - return (TaskbarIcon)d.GetValue(ParentTaskbarIconProperty); - } - - /// - /// Sets the ParentTaskbarIcon property. This dependency property - /// indicates .... - /// - public static void SetParentTaskbarIcon(DependencyObject d, TaskbarIcon value) - { - d.SetValue(ParentTaskbarIconProperty, value); - } - - #endregion - - - //BASE CLASS PROPERTY OVERRIDES - - /// - /// Registers properties. - /// - static TaskbarIcon() - { - //register change listener for the Visibility property - PropertyMetadata md = new PropertyMetadata(Visibility.Visible, VisibilityPropertyChanged); - VisibilityProperty.OverrideMetadata(typeof(TaskbarIcon), md); - - //register change listener for the DataContext property - md = new FrameworkPropertyMetadata(new PropertyChangedCallback(DataContextPropertyChanged)); - DataContextProperty.OverrideMetadata(typeof(TaskbarIcon), md); - - //register change listener for the ContextMenu property - md = new FrameworkPropertyMetadata(new PropertyChangedCallback(ContextMenuPropertyChanged)); - ContextMenuProperty.OverrideMetadata(typeof(TaskbarIcon), md); + /// Contains declarations of WPF dependency properties + /// and events. + /// + partial class TaskbarIcon + { + /// + /// Category name that is set on designer properties. + /// + public const string CategoryName = "NotifyIcon"; + + + //POPUP CONTROLS + + #region TrayPopupResolved + + /// + /// TrayPopupResolved Read-Only Dependency Property + /// + private static readonly DependencyPropertyKey TrayPopupResolvedPropertyKey + = DependencyProperty.RegisterReadOnly("TrayPopupResolved", typeof (Popup), typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null)); + + + /// + /// A read-only dependency property that returns the + /// that is being displayed in the taskbar area based on a user action. + /// + public static readonly DependencyProperty TrayPopupResolvedProperty + = TrayPopupResolvedPropertyKey.DependencyProperty; + + /// + /// Gets the TrayPopupResolved property. Returns + /// a which is either the + /// control itself or a + /// control that contains the + /// . + /// + [Category(CategoryName)] + public Popup TrayPopupResolved + { + get { return (Popup) GetValue(TrayPopupResolvedProperty); } + } + + /// + /// Provides a secure method for setting the TrayPopupResolved property. + /// This dependency property indicates .... + /// + /// The new value for the property. + protected void SetTrayPopupResolved(Popup value) + { + SetValue(TrayPopupResolvedPropertyKey, value); + } + + #endregion + + #region TrayToolTipResolved + + /// + /// TrayToolTipResolved Read-Only Dependency Property + /// + private static readonly DependencyPropertyKey TrayToolTipResolvedPropertyKey + = DependencyProperty.RegisterReadOnly("TrayToolTipResolved", typeof (ToolTip), typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null)); + + + /// + /// A read-only dependency property that returns the + /// that is being displayed. + /// + public static readonly DependencyProperty TrayToolTipResolvedProperty + = TrayToolTipResolvedPropertyKey.DependencyProperty; + + /// + /// Gets the TrayToolTipResolved property. Returns + /// a control that was created + /// in order to display either + /// or . + /// + [Category(CategoryName)] + [Browsable(true)] + [Bindable(true)] + public ToolTip TrayToolTipResolved + { + get { return (ToolTip) GetValue(TrayToolTipResolvedProperty); } + } + + /// + /// Provides a secure method for setting the + /// property. + /// + /// The new value for the property. + protected void SetTrayToolTipResolved(ToolTip value) + { + SetValue(TrayToolTipResolvedPropertyKey, value); + } + + #endregion + + #region CustomBalloon + + /// + /// CustomBalloon Read-Only Dependency Property + /// + private static readonly DependencyPropertyKey CustomBalloonPropertyKey + = DependencyProperty.RegisterReadOnly("CustomBalloon", typeof (Popup), typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null)); + + public static readonly DependencyProperty CustomBalloonProperty + = CustomBalloonPropertyKey.DependencyProperty; + + /// + /// A custom popup that is being displayed in the tray area in order + /// to display messages to the user. + /// + public Popup CustomBalloon + { + get { return (Popup) GetValue(CustomBalloonProperty); } + } + + /// + /// Provides a secure method for setting the property. + /// + /// The new value for the property. + protected void SetCustomBalloon(Popup value) + { + SetValue(CustomBalloonPropertyKey, value); + } + + #endregion + + //DEPENDENCY PROPERTIES + + #region Icon property / IconSource dependency property + + private Icon icon; + + /// + /// Gets or sets the icon to be displayed. This is not a + /// dependency property - if you want to assign the property + /// through XAML, please use the + /// dependency property. + /// + [Browsable(false)] + public Icon Icon + { + get { return icon; } + set + { + icon = value; + iconData.IconHandle = value == null ? IntPtr.Zero : icon.Handle; + + Util.WriteIconData(ref iconData, NotifyCommand.Modify, IconDataMembers.Icon); + } + } + + + /// + /// Resolves an image source and updates the property accordingly. + /// + public static readonly DependencyProperty IconSourceProperty = + DependencyProperty.Register("IconSource", + typeof (ImageSource), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null, IconSourcePropertyChanged)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// Resolves an image source and updates the property accordingly. + ///
+ [Category(CategoryName)] + [Description("Sets the displayed taskbar icon.")] + public ImageSource IconSource + { + get { return (ImageSource) GetValue(IconSourceProperty); } + set { SetValue(IconSourceProperty, value); } + } + + + /// + /// A static callback listener which is being invoked if the + /// dependency property has + /// been changed. Invokes the + /// instance method of the changed instance. + /// + /// The currently processed owner of the property. + /// Provides information about the updated property. + private static void IconSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + TaskbarIcon owner = (TaskbarIcon) d; + owner.OnIconSourcePropertyChanged(e); + } + + + /// + /// Handles changes of the dependency property. As + /// WPF internally uses the dependency property system and bypasses the + /// property wrapper, updates of the property's value + /// should be handled here. + /// + /// Provides information about the updated property. + private void OnIconSourcePropertyChanged(DependencyPropertyChangedEventArgs e) + { + ImageSource newValue = (ImageSource) e.NewValue; + + //resolving the ImageSource at design time is unlikely to work + if (!Util.IsDesignMode) Icon = newValue.ToIcon(); + } + + #endregion + + #region ToolTipText dependency property + + /// + /// A tooltip text that is being displayed if no custom + /// was set or if custom tooltips are not supported. + /// + public static readonly DependencyProperty ToolTipTextProperty = + DependencyProperty.Register("ToolTipText", + typeof (string), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(String.Empty, ToolTipTextPropertyChanged)); + + + /// + /// A property wrapper for the + /// dependency property:
+ /// A tooltip text that is being displayed if no custom + /// was set or if custom tooltips are not supported. + ///
+ [Category(CategoryName)] + [Description("Alternative to a fully blown ToolTip, which is only displayed on Vista and above.")] + public string ToolTipText + { + get { return (string) GetValue(ToolTipTextProperty); } + set { SetValue(ToolTipTextProperty, value); } + } + + + /// + /// A static callback listener which is being invoked if the + /// dependency property has + /// been changed. Invokes the + /// instance method of the changed instance. + /// + /// The currently processed owner of the property. + /// Provides information about the updated property. + private static void ToolTipTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + TaskbarIcon owner = (TaskbarIcon) d; + owner.OnToolTipTextPropertyChanged(e); + } + + + /// + /// Handles changes of the dependency property. As + /// WPF internally uses the dependency property system and bypasses the + /// property wrapper, updates of the property's value + /// should be handled here. + /// + /// Provides information about the updated property. + private void OnToolTipTextPropertyChanged(DependencyPropertyChangedEventArgs e) + { + //only recreate tooltip if we're not using a custom control + if (TrayToolTipResolved == null || TrayToolTipResolved.Content is string) + { + CreateCustomToolTip(); + } + + WriteToolTipSettings(); + } + + #endregion + + #region TrayToolTip dependency property + + /// + /// A custom UI element that is displayed as a tooltip if the user hovers over the taskbar icon. + /// Works only with Vista and above. Accordingly, you should make sure that + /// the property is set as well. + /// + public static readonly DependencyProperty TrayToolTipProperty = + DependencyProperty.Register("TrayToolTip", + typeof (UIElement), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null, TrayToolTipPropertyChanged)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// A custom UI element that is displayed as a tooltip if the user hovers over the taskbar icon. + /// Works only with Vista and above. Accordingly, you should make sure that + /// the property is set as well. + ///
+ [Category(CategoryName)] + [Description("Custom UI element that is displayed as a tooltip. Only on Vista and above")] + public UIElement TrayToolTip + { + get { return (UIElement) GetValue(TrayToolTipProperty); } + set { SetValue(TrayToolTipProperty, value); } + } + + + /// + /// A static callback listener which is being invoked if the + /// dependency property has + /// been changed. Invokes the + /// instance method of the changed instance. + /// + /// The currently processed owner of the property. + /// Provides information about the updated property. + private static void TrayToolTipPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + TaskbarIcon owner = (TaskbarIcon) d; + owner.OnTrayToolTipPropertyChanged(e); + } + + + /// + /// Handles changes of the dependency property. As + /// WPF internally uses the dependency property system and bypasses the + /// property wrapper, updates of the property's value + /// should be handled here. + /// + /// Provides information about the updated property. + private void OnTrayToolTipPropertyChanged(DependencyPropertyChangedEventArgs e) + { + //recreate tooltip control + CreateCustomToolTip(); + + if (e.OldValue != null) + { + //remove the taskbar icon reference from the previously used element + SetParentTaskbarIcon((DependencyObject) e.OldValue, null); + } + + + if (e.NewValue != null) + { + //set this taskbar icon as a reference to the new tooltip element + SetParentTaskbarIcon((DependencyObject) e.NewValue, this); + } + + + //update tooltip settings - needed to make sure a string is set, even + //if the ToolTipText property is not set. Otherwise, the event that + //triggers tooltip display is never fired. + WriteToolTipSettings(); + } + + #endregion + + #region TrayPopup dependency property + + /// + /// A control that is displayed as a popup when the taskbar icon is clicked. + /// + public static readonly DependencyProperty TrayPopupProperty = + DependencyProperty.Register("TrayPopup", + typeof (UIElement), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null, TrayPopupPropertyChanged)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// A control that is displayed as a popup when the taskbar icon is clicked. + ///
+ [Category(CategoryName)] + [Description("Displayed as a Popup if the user clicks on the taskbar icon.")] + public UIElement TrayPopup + { + get { return (UIElement) GetValue(TrayPopupProperty); } + set { SetValue(TrayPopupProperty, value); } + } + + + /// + /// A static callback listener which is being invoked if the + /// dependency property has + /// been changed. Invokes the + /// instance method of the changed instance. + /// + /// The currently processed owner of the property. + /// Provides information about the updated property. + private static void TrayPopupPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + TaskbarIcon owner = (TaskbarIcon) d; + owner.OnTrayPopupPropertyChanged(e); + } + + + /// + /// Handles changes of the dependency property. As + /// WPF internally uses the dependency property system and bypasses the + /// property wrapper, updates of the property's value + /// should be handled here. + /// + /// Provides information about the updated property. + private void OnTrayPopupPropertyChanged(DependencyPropertyChangedEventArgs e) + { + if (e.OldValue != null) + { + //remove the taskbar icon reference from the previously used element + SetParentTaskbarIcon((DependencyObject) e.OldValue, null); + } + + + if (e.NewValue != null) + { + //set this taskbar icon as a reference to the new tooltip element + SetParentTaskbarIcon((DependencyObject) e.NewValue, this); + } + + //create a pop + CreatePopup(); + } + + #endregion + + #region MenuActivation dependency property + + /// + /// Defines what mouse events display the context menu. + /// Defaults to . + /// + public static readonly DependencyProperty MenuActivationProperty = + DependencyProperty.Register("MenuActivation", + typeof (PopupActivationMode), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(PopupActivationMode.RightClick)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// Defines what mouse events display the context menu. + /// Defaults to . + ///
+ [Category(CategoryName)] + [Description("Defines what mouse events display the context menu.")] + public PopupActivationMode MenuActivation + { + get { return (PopupActivationMode) GetValue(MenuActivationProperty); } + set { SetValue(MenuActivationProperty, value); } + } + + #endregion + + #region PopupActivation dependency property + + /// + /// Defines what mouse events trigger the . + /// Default is . + /// + public static readonly DependencyProperty PopupActivationProperty = + DependencyProperty.Register("PopupActivation", + typeof (PopupActivationMode), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(PopupActivationMode.LeftClick)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// Defines what mouse events trigger the . + /// Default is . + ///
+ [Category(CategoryName)] + [Description("Defines what mouse events display the TaskbarIconPopup.")] + public PopupActivationMode PopupActivation + { + get { return (PopupActivationMode) GetValue(PopupActivationProperty); } + set { SetValue(PopupActivationProperty, value); } + } + + #endregion + + #region Visibility dependency property override + + /// + /// A static callback listener which is being invoked if the + /// dependency property has + /// been changed. Invokes the + /// instance method of the changed instance. + /// + /// The currently processed owner of the property. + /// Provides information about the updated property. + private static void VisibilityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + TaskbarIcon owner = (TaskbarIcon) d; + owner.OnVisibilityPropertyChanged(e); + } + + + /// + /// Handles changes of the dependency property. As + /// WPF internally uses the dependency property system and bypasses the + /// property wrapper, updates of the property's value + /// should be handled here. + /// + /// Provides information about the updated property. + private void OnVisibilityPropertyChanged(DependencyPropertyChangedEventArgs e) + { + Visibility newValue = (Visibility) e.NewValue; + + //update + if (newValue == Visibility.Visible) + { + CreateTaskbarIcon(); + } + else + { + RemoveTaskbarIcon(); + } + } + + #endregion + + #region DataContext dependency property override / target update + + /// + /// Updates the of a given + /// . This method only updates target elements + /// that do not already have a data context of their own, and either assigns + /// the of the NotifyIcon, or the + /// NotifyIcon itself, if no data context was assigned at all. + /// + private void UpdateDataContext(FrameworkElement target, object oldDataContextValue, object newDataContextValue) + { + //if there is no target or it's data context is determined through a binding + //of its own, keep it + if (target == null || target.IsDataContextDataBound()) return; + + //if the target's data context is the NotifyIcon's old DataContext or the NotifyIcon itself, + //update it + if (ReferenceEquals(this, target.DataContext) || Equals(oldDataContextValue, target.DataContext)) + { + //assign own data context, if available. If there is no data + //context at all, assign NotifyIcon itself. + target.DataContext = newDataContextValue ?? this; + } + } + + /// + /// A static callback listener which is being invoked if the + /// dependency property has + /// been changed. Invokes the + /// instance method of the changed instance. + /// + /// The currently processed owner of the property. + /// Provides information about the updated property. + private static void DataContextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + TaskbarIcon owner = (TaskbarIcon) d; + owner.OnDataContextPropertyChanged(e); + } + + + /// + /// Handles changes of the dependency property. As + /// WPF internally uses the dependency property system and bypasses the + /// property wrapper, updates of the property's value + /// should be handled here. + /// + /// Provides information about the updated property. + private void OnDataContextPropertyChanged(DependencyPropertyChangedEventArgs e) + { + object newValue = e.NewValue; + object oldValue = e.OldValue; + + //replace custom data context for ToolTips, Popup, and + //ContextMenu + UpdateDataContext(TrayPopupResolved, oldValue, newValue); + UpdateDataContext(TrayToolTipResolved, oldValue, newValue); + UpdateDataContext(ContextMenu, oldValue, newValue); + } + + #endregion + + #region ContextMenu dependency property override + + /// + /// A static callback listener which is being invoked if the + /// dependency property has + /// been changed. Invokes the + /// instance method of the changed instance. + /// + /// The currently processed owner of the property. + /// Provides information about the updated property. + private static void ContextMenuPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + TaskbarIcon owner = (TaskbarIcon) d; + owner.OnContextMenuPropertyChanged(e); + } + + + /// + /// Releases the old and updates the new property + /// in order to reflect both the NotifyIcon's + /// property and have the assigned. + /// + /// Provides information about the updated property. + private void OnContextMenuPropertyChanged(DependencyPropertyChangedEventArgs e) + { + if (e.OldValue != null) + { + //remove the taskbar icon reference from the previously used element + SetParentTaskbarIcon((DependencyObject) e.OldValue, null); + } + + if (e.NewValue != null) + { + //set this taskbar icon as a reference to the new tooltip element + SetParentTaskbarIcon((DependencyObject) e.NewValue, this); + } + + UpdateDataContext((ContextMenu) e.NewValue, null, DataContext); + } + + #endregion + + #region DoubleClickCommand dependency property + + /// + /// Associates a command that is being executed if the tray icon is being + /// double clicked. + /// + public static readonly DependencyProperty DoubleClickCommandProperty = + DependencyProperty.Register("DoubleClickCommand", + typeof (ICommand), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// Associates a command that is being executed if the tray icon is being + /// double clicked. + ///
+ [Category(CategoryName)] + [Description("A command that is being executed if the tray icon is being double-clicked.")] + public ICommand DoubleClickCommand + { + get { return (ICommand) GetValue(DoubleClickCommandProperty); } + set { SetValue(DoubleClickCommandProperty, value); } + } + + #endregion + + #region DoubleClickCommandParameter dependency property + + /// + /// Command parameter for the . + /// + public static readonly DependencyProperty DoubleClickCommandParameterProperty = + DependencyProperty.Register("DoubleClickCommandParameter", + typeof (object), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// Command parameter for the . + ///
+ [Category(CategoryName)] + [Description("Parameter to submit to the DoubleClickCommand when the user double clicks on the NotifyIcon.")] + public object DoubleClickCommandParameter + { + get { return GetValue(DoubleClickCommandParameterProperty); } + set { SetValue(DoubleClickCommandParameterProperty, value); } + } + + #endregion + + #region DoubleClickCommandTarget dependency property + + /// + /// The target of the command that is fired if the notify icon is double clicked. + /// + public static readonly DependencyProperty DoubleClickCommandTargetProperty = + DependencyProperty.Register("DoubleClickCommandTarget", + typeof (IInputElement), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// The target of the command that is fired if the notify icon is double clicked. + ///
+ [Category(CategoryName)] + [Description("The target of the command that is fired if the notify icon is double clicked.")] + public IInputElement DoubleClickCommandTarget + { + get { return (IInputElement) GetValue(DoubleClickCommandTargetProperty); } + set { SetValue(DoubleClickCommandTargetProperty, value); } + } + + #endregion + + #region LeftClickCommand dependency property + + /// + /// Associates a command that is being executed if the tray icon is being + /// double clicked. + /// + public static readonly DependencyProperty LeftClickCommandProperty = + DependencyProperty.Register("LeftClickCommand", + typeof (ICommand), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// Associates a command that is being executed if the tray icon is being + /// left-clicked. + ///
+ [Category(CategoryName)] + [Description("A command that is being executed if the tray icon is being left-clicked.")] + public ICommand LeftClickCommand + { + get { return (ICommand) GetValue(LeftClickCommandProperty); } + set { SetValue(LeftClickCommandProperty, value); } + } + + #endregion + + #region LeftClickCommandParameter dependency property + + /// + /// Command parameter for the . + /// + public static readonly DependencyProperty LeftClickCommandParameterProperty = + DependencyProperty.Register("LeftClickCommandParameter", + typeof (object), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// Command parameter for the . + ///
+ [Category(CategoryName)] + [Description("The target of the command that is fired if the notify icon is clicked with the left mouse button." + )] + public object LeftClickCommandParameter + { + get { return GetValue(LeftClickCommandParameterProperty); } + set { SetValue(LeftClickCommandParameterProperty, value); } + } + + #endregion + + #region LeftClickCommandTarget dependency property + + /// + /// The target of the command that is fired if the notify icon is clicked. + /// + public static readonly DependencyProperty LeftClickCommandTargetProperty = + DependencyProperty.Register("LeftClickCommandTarget", + typeof (IInputElement), + typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null)); + + /// + /// A property wrapper for the + /// dependency property:
+ /// The target of the command that is fired if the notify icon is clicked. + ///
+ [Category(CategoryName)] + [Description("The target of the command that is fired if the notify icon is clicked with the left mouse button." + )] + public IInputElement LeftClickCommandTarget + { + get { return (IInputElement) GetValue(LeftClickCommandTargetProperty); } + set { SetValue(LeftClickCommandTargetProperty, value); } + } + + #endregion + + //EVENTS + + #region TrayLeftMouseDown + + /// + /// TrayLeftMouseDown Routed Event + /// + public static readonly RoutedEvent TrayLeftMouseDownEvent = EventManager.RegisterRoutedEvent( + "TrayLeftMouseDown", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when the user presses the left mouse button. + /// + [Category(CategoryName)] + public event RoutedEventHandler TrayLeftMouseDown + { + add { AddHandler(TrayLeftMouseDownEvent, value); } + remove { RemoveHandler(TrayLeftMouseDownEvent, value); } + } + + /// + /// A helper method to raise the TrayLeftMouseDown event. + /// + protected RoutedEventArgs RaiseTrayLeftMouseDownEvent() + { + RoutedEventArgs args = RaiseTrayLeftMouseDownEvent(this); + return args; + } + + /// + /// A static helper method to raise the TrayLeftMouseDown event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayLeftMouseDownEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayLeftMouseDownEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayRightMouseDown + + /// + /// TrayRightMouseDown Routed Event + /// + public static readonly RoutedEvent TrayRightMouseDownEvent = + EventManager.RegisterRoutedEvent("TrayRightMouseDown", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when the presses the right mouse button. + /// + public event RoutedEventHandler TrayRightMouseDown + { + add { AddHandler(TrayRightMouseDownEvent, value); } + remove { RemoveHandler(TrayRightMouseDownEvent, value); } + } + + /// + /// A helper method to raise the TrayRightMouseDown event. + /// + protected RoutedEventArgs RaiseTrayRightMouseDownEvent() + { + return RaiseTrayRightMouseDownEvent(this); + } + + /// + /// A static helper method to raise the TrayRightMouseDown event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayRightMouseDownEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayRightMouseDownEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayMiddleMouseDown + + /// + /// TrayMiddleMouseDown Routed Event + /// + public static readonly RoutedEvent TrayMiddleMouseDownEvent = + EventManager.RegisterRoutedEvent("TrayMiddleMouseDown", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when the user presses the middle mouse button. + /// + public event RoutedEventHandler TrayMiddleMouseDown + { + add { AddHandler(TrayMiddleMouseDownEvent, value); } + remove { RemoveHandler(TrayMiddleMouseDownEvent, value); } + } + + /// + /// A helper method to raise the TrayMiddleMouseDown event. + /// + protected RoutedEventArgs RaiseTrayMiddleMouseDownEvent() + { + return RaiseTrayMiddleMouseDownEvent(this); + } + + /// + /// A static helper method to raise the TrayMiddleMouseDown event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayMiddleMouseDownEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayMiddleMouseDownEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayLeftMouseUp + + /// + /// TrayLeftMouseUp Routed Event + /// + public static readonly RoutedEvent TrayLeftMouseUpEvent = EventManager.RegisterRoutedEvent("TrayLeftMouseUp", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when the user releases the left mouse button. + /// + public event RoutedEventHandler TrayLeftMouseUp + { + add { AddHandler(TrayLeftMouseUpEvent, value); } + remove { RemoveHandler(TrayLeftMouseUpEvent, value); } + } + + /// + /// A helper method to raise the TrayLeftMouseUp event. + /// + protected RoutedEventArgs RaiseTrayLeftMouseUpEvent() + { + return RaiseTrayLeftMouseUpEvent(this); + } + + /// + /// A static helper method to raise the TrayLeftMouseUp event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayLeftMouseUpEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayLeftMouseUpEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayRightMouseUp + + /// + /// TrayRightMouseUp Routed Event + /// + public static readonly RoutedEvent TrayRightMouseUpEvent = EventManager.RegisterRoutedEvent("TrayRightMouseUp", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when the user releases the right mouse button. + /// + public event RoutedEventHandler TrayRightMouseUp + { + add { AddHandler(TrayRightMouseUpEvent, value); } + remove { RemoveHandler(TrayRightMouseUpEvent, value); } + } + + /// + /// A helper method to raise the TrayRightMouseUp event. + /// + protected RoutedEventArgs RaiseTrayRightMouseUpEvent() + { + return RaiseTrayRightMouseUpEvent(this); + } + + /// + /// A static helper method to raise the TrayRightMouseUp event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayRightMouseUpEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayRightMouseUpEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayMiddleMouseUp + + /// + /// TrayMiddleMouseUp Routed Event + /// + public static readonly RoutedEvent TrayMiddleMouseUpEvent = EventManager.RegisterRoutedEvent( + "TrayMiddleMouseUp", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when the user releases the middle mouse button. + /// + public event RoutedEventHandler TrayMiddleMouseUp + { + add { AddHandler(TrayMiddleMouseUpEvent, value); } + remove { RemoveHandler(TrayMiddleMouseUpEvent, value); } + } + + /// + /// A helper method to raise the TrayMiddleMouseUp event. + /// + protected RoutedEventArgs RaiseTrayMiddleMouseUpEvent() + { + return RaiseTrayMiddleMouseUpEvent(this); + } + + /// + /// A static helper method to raise the TrayMiddleMouseUp event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayMiddleMouseUpEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayMiddleMouseUpEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayMouseDoubleClick + + /// + /// TrayMouseDoubleClick Routed Event + /// + public static readonly RoutedEvent TrayMouseDoubleClickEvent = + EventManager.RegisterRoutedEvent("TrayMouseDoubleClick", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when the user double-clicks the taskbar icon. + /// + public event RoutedEventHandler TrayMouseDoubleClick + { + add { AddHandler(TrayMouseDoubleClickEvent, value); } + remove { RemoveHandler(TrayMouseDoubleClickEvent, value); } + } + + /// + /// A helper method to raise the TrayMouseDoubleClick event. + /// + protected RoutedEventArgs RaiseTrayMouseDoubleClickEvent() + { + RoutedEventArgs args = RaiseTrayMouseDoubleClickEvent(this); + DoubleClickCommand.ExecuteIfEnabled(DoubleClickCommandParameter, DoubleClickCommandTarget ?? this); + return args; + } + + /// + /// A static helper method to raise the TrayMouseDoubleClick event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayMouseDoubleClickEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayMouseDoubleClickEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayMouseMove + + /// + /// TrayMouseMove Routed Event + /// + public static readonly RoutedEvent TrayMouseMoveEvent = EventManager.RegisterRoutedEvent("TrayMouseMove", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when the user moves the mouse over the taskbar icon. + /// + public event RoutedEventHandler TrayMouseMove + { + add { AddHandler(TrayMouseMoveEvent, value); } + remove { RemoveHandler(TrayMouseMoveEvent, value); } + } + + /// + /// A helper method to raise the TrayMouseMove event. + /// + protected RoutedEventArgs RaiseTrayMouseMoveEvent() + { + return RaiseTrayMouseMoveEvent(this); + } + + /// + /// A static helper method to raise the TrayMouseMove event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayMouseMoveEvent(DependencyObject target) + { + if (target == null) return null; + + var args = new RoutedEventArgs(); + args.RoutedEvent = TrayMouseMoveEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayBalloonTipShown + + /// + /// TrayBalloonTipShown Routed Event + /// + public static readonly RoutedEvent TrayBalloonTipShownEvent = + EventManager.RegisterRoutedEvent("TrayBalloonTipShown", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when a balloon ToolTip is displayed. + /// + public event RoutedEventHandler TrayBalloonTipShown + { + add { AddHandler(TrayBalloonTipShownEvent, value); } + remove { RemoveHandler(TrayBalloonTipShownEvent, value); } + } + + /// + /// A helper method to raise the TrayBalloonTipShown event. + /// + protected RoutedEventArgs RaiseTrayBalloonTipShownEvent() + { + return RaiseTrayBalloonTipShownEvent(this); + } + + /// + /// A static helper method to raise the TrayBalloonTipShown event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayBalloonTipShownEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayBalloonTipShownEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayBalloonTipClosed + + /// + /// TrayBalloonTipClosed Routed Event + /// + public static readonly RoutedEvent TrayBalloonTipClosedEvent = + EventManager.RegisterRoutedEvent("TrayBalloonTipClosed", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when a balloon ToolTip was closed. + /// + public event RoutedEventHandler TrayBalloonTipClosed + { + add { AddHandler(TrayBalloonTipClosedEvent, value); } + remove { RemoveHandler(TrayBalloonTipClosedEvent, value); } + } + + /// + /// A helper method to raise the TrayBalloonTipClosed event. + /// + protected RoutedEventArgs RaiseTrayBalloonTipClosedEvent() + { + return RaiseTrayBalloonTipClosedEvent(this); + } + + /// + /// A static helper method to raise the TrayBalloonTipClosed event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayBalloonTipClosedEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayBalloonTipClosedEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayBalloonTipClicked + + /// + /// TrayBalloonTipClicked Routed Event + /// + public static readonly RoutedEvent TrayBalloonTipClickedEvent = + EventManager.RegisterRoutedEvent("TrayBalloonTipClicked", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Occurs when the user clicks on a balloon ToolTip. + /// + public event RoutedEventHandler TrayBalloonTipClicked + { + add { AddHandler(TrayBalloonTipClickedEvent, value); } + remove { RemoveHandler(TrayBalloonTipClickedEvent, value); } + } + + /// + /// A helper method to raise the TrayBalloonTipClicked event. + /// + protected RoutedEventArgs RaiseTrayBalloonTipClickedEvent() + { + return RaiseTrayBalloonTipClickedEvent(this); + } + + /// + /// A static helper method to raise the TrayBalloonTipClicked event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayBalloonTipClickedEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayBalloonTipClickedEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayContextMenuOpen (and PreviewTrayContextMenuOpen) + + /// + /// TrayContextMenuOpen Routed Event + /// + public static readonly RoutedEvent TrayContextMenuOpenEvent = + EventManager.RegisterRoutedEvent("TrayContextMenuOpen", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Bubbled event that occurs when the context menu of the taskbar icon is being displayed. + /// + public event RoutedEventHandler TrayContextMenuOpen + { + add { AddHandler(TrayContextMenuOpenEvent, value); } + remove { RemoveHandler(TrayContextMenuOpenEvent, value); } + } + + /// + /// A helper method to raise the TrayContextMenuOpen event. + /// + protected RoutedEventArgs RaiseTrayContextMenuOpenEvent() + { + return RaiseTrayContextMenuOpenEvent(this); + } + + /// + /// A static helper method to raise the TrayContextMenuOpen event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayContextMenuOpenEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayContextMenuOpenEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + /// + /// PreviewTrayContextMenuOpen Routed Event + /// + public static readonly RoutedEvent PreviewTrayContextMenuOpenEvent = + EventManager.RegisterRoutedEvent("PreviewTrayContextMenuOpen", + RoutingStrategy.Tunnel, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Tunneled event that occurs when the context menu of the taskbar icon is being displayed. + /// + public event RoutedEventHandler PreviewTrayContextMenuOpen + { + add { AddHandler(PreviewTrayContextMenuOpenEvent, value); } + remove { RemoveHandler(PreviewTrayContextMenuOpenEvent, value); } + } + + /// + /// A helper method to raise the PreviewTrayContextMenuOpen event. + /// + protected RoutedEventArgs RaisePreviewTrayContextMenuOpenEvent() + { + return RaisePreviewTrayContextMenuOpenEvent(this); + } + + /// + /// A static helper method to raise the PreviewTrayContextMenuOpen event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaisePreviewTrayContextMenuOpenEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = PreviewTrayContextMenuOpenEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayPopupOpen (and PreviewTrayPopupOpen) + + /// + /// TrayPopupOpen Routed Event + /// + public static readonly RoutedEvent TrayPopupOpenEvent = EventManager.RegisterRoutedEvent("TrayPopupOpen", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Bubbled event that occurs when the custom popup is being opened. + /// + public event RoutedEventHandler TrayPopupOpen + { + add { AddHandler(TrayPopupOpenEvent, value); } + remove { RemoveHandler(TrayPopupOpenEvent, value); } + } + + /// + /// A helper method to raise the TrayPopupOpen event. + /// + protected RoutedEventArgs RaiseTrayPopupOpenEvent() + { + return RaiseTrayPopupOpenEvent(this); + } + + /// + /// A static helper method to raise the TrayPopupOpen event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayPopupOpenEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayPopupOpenEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + /// + /// PreviewTrayPopupOpen Routed Event + /// + public static readonly RoutedEvent PreviewTrayPopupOpenEvent = + EventManager.RegisterRoutedEvent("PreviewTrayPopupOpen", + RoutingStrategy.Tunnel, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Tunneled event that occurs when the custom popup is being opened. + /// + public event RoutedEventHandler PreviewTrayPopupOpen + { + add { AddHandler(PreviewTrayPopupOpenEvent, value); } + remove { RemoveHandler(PreviewTrayPopupOpenEvent, value); } + } + + /// + /// A helper method to raise the PreviewTrayPopupOpen event. + /// + protected RoutedEventArgs RaisePreviewTrayPopupOpenEvent() + { + return RaisePreviewTrayPopupOpenEvent(this); + } + + /// + /// A static helper method to raise the PreviewTrayPopupOpen event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaisePreviewTrayPopupOpenEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = PreviewTrayPopupOpenEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayToolTipOpen (and PreviewTrayToolTipOpen) + + /// + /// TrayToolTipOpen Routed Event + /// + public static readonly RoutedEvent TrayToolTipOpenEvent = EventManager.RegisterRoutedEvent("TrayToolTipOpen", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Bubbled event that occurs when the custom ToolTip is being displayed. + /// + public event RoutedEventHandler TrayToolTipOpen + { + add { AddHandler(TrayToolTipOpenEvent, value); } + remove { RemoveHandler(TrayToolTipOpenEvent, value); } + } + + /// + /// A helper method to raise the TrayToolTipOpen event. + /// + protected RoutedEventArgs RaiseTrayToolTipOpenEvent() + { + return RaiseTrayToolTipOpenEvent(this); + } + + /// + /// A static helper method to raise the TrayToolTipOpen event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayToolTipOpenEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayToolTipOpenEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + /// + /// PreviewTrayToolTipOpen Routed Event + /// + public static readonly RoutedEvent PreviewTrayToolTipOpenEvent = + EventManager.RegisterRoutedEvent("PreviewTrayToolTipOpen", + RoutingStrategy.Tunnel, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Tunneled event that occurs when the custom ToolTip is being displayed. + /// + public event RoutedEventHandler PreviewTrayToolTipOpen + { + add { AddHandler(PreviewTrayToolTipOpenEvent, value); } + remove { RemoveHandler(PreviewTrayToolTipOpenEvent, value); } + } + + /// + /// A helper method to raise the PreviewTrayToolTipOpen event. + /// + protected RoutedEventArgs RaisePreviewTrayToolTipOpenEvent() + { + return RaisePreviewTrayToolTipOpenEvent(this); + } + + /// + /// A static helper method to raise the PreviewTrayToolTipOpen event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaisePreviewTrayToolTipOpenEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = PreviewTrayToolTipOpenEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region TrayToolTipClose (and PreviewTrayToolTipClose) + + /// + /// TrayToolTipClose Routed Event + /// + public static readonly RoutedEvent TrayToolTipCloseEvent = EventManager.RegisterRoutedEvent("TrayToolTipClose", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Bubbled event that occurs when a custom tooltip is being closed. + /// + public event RoutedEventHandler TrayToolTipClose + { + add { AddHandler(TrayToolTipCloseEvent, value); } + remove { RemoveHandler(TrayToolTipCloseEvent, value); } + } + + /// + /// A helper method to raise the TrayToolTipClose event. + /// + protected RoutedEventArgs RaiseTrayToolTipCloseEvent() + { + return RaiseTrayToolTipCloseEvent(this); + } + + /// + /// A static helper method to raise the TrayToolTipClose event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseTrayToolTipCloseEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = TrayToolTipCloseEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + /// + /// PreviewTrayToolTipClose Routed Event + /// + public static readonly RoutedEvent PreviewTrayToolTipCloseEvent = + EventManager.RegisterRoutedEvent("PreviewTrayToolTipClose", + RoutingStrategy.Tunnel, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Tunneled event that occurs when a custom tooltip is being closed. + /// + public event RoutedEventHandler PreviewTrayToolTipClose + { + add { AddHandler(PreviewTrayToolTipCloseEvent, value); } + remove { RemoveHandler(PreviewTrayToolTipCloseEvent, value); } + } + + /// + /// A helper method to raise the PreviewTrayToolTipClose event. + /// + protected RoutedEventArgs RaisePreviewTrayToolTipCloseEvent() + { + return RaisePreviewTrayToolTipCloseEvent(this); + } + + /// + /// A static helper method to raise the PreviewTrayToolTipClose event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaisePreviewTrayToolTipCloseEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = PreviewTrayToolTipCloseEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + //ATTACHED EVENTS + + #region PopupOpened + + /// + /// PopupOpened Attached Routed Event + /// + public static readonly RoutedEvent PopupOpenedEvent = EventManager.RegisterRoutedEvent("PopupOpened", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Adds a handler for the PopupOpened attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be added + public static void AddPopupOpenedHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.AddHandler(element, PopupOpenedEvent, handler); + } + + /// + /// Removes a handler for the PopupOpened attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be removed + public static void RemovePopupOpenedHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.RemoveHandler(element, PopupOpenedEvent, handler); + } + + /// + /// A static helper method to raise the PopupOpened event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaisePopupOpenedEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = PopupOpenedEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region ToolTipOpened + + /// + /// ToolTipOpened Attached Routed Event + /// + public static readonly RoutedEvent ToolTipOpenedEvent = EventManager.RegisterRoutedEvent("ToolTipOpened", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Adds a handler for the ToolTipOpened attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be added + public static void AddToolTipOpenedHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.AddHandler(element, ToolTipOpenedEvent, handler); + } + + /// + /// Removes a handler for the ToolTipOpened attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be removed + public static void RemoveToolTipOpenedHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.RemoveHandler(element, ToolTipOpenedEvent, handler); + } + + /// + /// A static helper method to raise the ToolTipOpened event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseToolTipOpenedEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = ToolTipOpenedEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region ToolTipClose + + /// + /// ToolTipClose Attached Routed Event + /// + public static readonly RoutedEvent ToolTipCloseEvent = EventManager.RegisterRoutedEvent("ToolTipClose", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Adds a handler for the ToolTipClose attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be added + public static void AddToolTipCloseHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.AddHandler(element, ToolTipCloseEvent, handler); + } + + /// + /// Removes a handler for the ToolTipClose attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be removed + public static void RemoveToolTipCloseHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.RemoveHandler(element, ToolTipCloseEvent, handler); + } + + /// + /// A static helper method to raise the ToolTipClose event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + internal static RoutedEventArgs RaiseToolTipCloseEvent(DependencyObject target) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(); + args.RoutedEvent = ToolTipCloseEvent; + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region BalloonShowing + + /// + /// BalloonShowing Attached Routed Event + /// + public static readonly RoutedEvent BalloonShowingEvent = EventManager.RegisterRoutedEvent("BalloonShowing", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Adds a handler for the BalloonShowing attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be added + public static void AddBalloonShowingHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.AddHandler(element, BalloonShowingEvent, handler); + } + + /// + /// Removes a handler for the BalloonShowing attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be removed + public static void RemoveBalloonShowingHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.RemoveHandler(element, BalloonShowingEvent, handler); + } + + /// + /// A static helper method to raise the BalloonShowing event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + /// The instance that manages the balloon. + internal static RoutedEventArgs RaiseBalloonShowingEvent(DependencyObject target, TaskbarIcon source) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(BalloonShowingEvent, source); + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + #region BalloonClosing + + /// + /// BalloonClosing Attached Routed Event + /// + public static readonly RoutedEvent BalloonClosingEvent = EventManager.RegisterRoutedEvent("BalloonClosing", + RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (TaskbarIcon)); + + /// + /// Adds a handler for the BalloonClosing attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be added + public static void AddBalloonClosingHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.AddHandler(element, BalloonClosingEvent, handler); + } + + /// + /// Removes a handler for the BalloonClosing attached event + /// + /// UIElement or ContentElement that listens to the event + /// Event handler to be removed + public static void RemoveBalloonClosingHandler(DependencyObject element, RoutedEventHandler handler) + { + RoutedEventHelper.RemoveHandler(element, BalloonClosingEvent, handler); + } + + /// + /// A static helper method to raise the BalloonClosing event on a target element. + /// + /// UIElement or ContentElement on which to raise the event + /// The instance that manages the balloon. + internal static RoutedEventArgs RaiseBalloonClosingEvent(DependencyObject target, TaskbarIcon source) + { + if (target == null) return null; + + RoutedEventArgs args = new RoutedEventArgs(BalloonClosingEvent, source); + RoutedEventHelper.RaiseEvent(target, args); + return args; + } + + #endregion + + //ATTACHED PROPERTIES + + #region ParentTaskbarIcon + + /// + /// An attached property that is assigned to displayed UI elements (balloos, tooltips, context menus), and + /// that can be used to bind to this control. The attached property is being derived, so binding is + /// quite straightforward: + /// + /// + /// + /// + public static readonly DependencyProperty ParentTaskbarIconProperty = + DependencyProperty.RegisterAttached("ParentTaskbarIcon", typeof (TaskbarIcon), typeof (TaskbarIcon), + new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits)); + + /// + /// Gets the ParentTaskbarIcon property. This dependency property + /// indicates .... + /// + public static TaskbarIcon GetParentTaskbarIcon(DependencyObject d) + { + return (TaskbarIcon) d.GetValue(ParentTaskbarIconProperty); + } + + /// + /// Sets the ParentTaskbarIcon property. This dependency property + /// indicates .... + /// + public static void SetParentTaskbarIcon(DependencyObject d, TaskbarIcon value) + { + d.SetValue(ParentTaskbarIconProperty, value); + } + + #endregion + + //BASE CLASS PROPERTY OVERRIDES + + /// + /// Registers properties. + /// + static TaskbarIcon() + { + //register change listener for the Visibility property + var md = new PropertyMetadata(Visibility.Visible, VisibilityPropertyChanged); + VisibilityProperty.OverrideMetadata(typeof (TaskbarIcon), md); + + //register change listener for the DataContext property + md = new FrameworkPropertyMetadata(new PropertyChangedCallback(DataContextPropertyChanged)); + DataContextProperty.OverrideMetadata(typeof (TaskbarIcon), md); + + //register change listener for the ContextMenu property + md = new FrameworkPropertyMetadata(new PropertyChangedCallback(ContextMenuPropertyChanged)); + ContextMenuProperty.OverrideMetadata(typeof (TaskbarIcon), md); + } } - - - } } \ No newline at end of file