using System; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; using Hardcodet.Wpf.TaskbarNotification; namespace FSI.BT.Tools { /// /// Interaktionslogik für ToolTip.xaml /// public partial class ToolTip : UserControl { private bool isClosing = false; #region BalloonText dependency property /// /// Description /// public static readonly DependencyProperty BalloonTextProperty = DependencyProperty.Register(nameof(BalloonText), typeof(string), typeof(ToolTip), new FrameworkPropertyMetadata(string.Empty)); /// /// A property wrapper for the /// dependency property:
/// Description ///
public string BalloonText { get { return (string)GetValue(BalloonTextProperty); } set { SetValue(BalloonTextProperty, value); } } /// /// Description /// public static readonly DependencyProperty BalloonDescProperty = DependencyProperty.Register(nameof(BalloonDesc), typeof(string), typeof(ToolTip), new FrameworkPropertyMetadata(string.Empty)); /// /// A property wrapper for the /// dependency property:
/// Description ///
public string BalloonDesc { get { return (string)GetValue(BalloonDescProperty); } set { SetValue(BalloonDescProperty, value); } } #endregion public ToolTip() { InitializeComponent(); TaskbarIcon.AddBalloonClosingHandler(this, OnBalloonClosing); } /// /// By subscribing to the /// and setting the "Handled" property to true, we suppress the popup /// from being closed in order to display the custom fade-out animation. /// private void OnBalloonClosing(object sender, RoutedEventArgs e) { e.Handled = true; //suppresses the popup from being closed immediately isClosing = true; } /// /// Resolves the that displayed /// the balloon and requests a close action. /// private void imgClose_MouseDown(object sender, MouseButtonEventArgs e) { //the tray icon assigned this attached property to simplify access TaskbarIcon taskbarIcon = TaskbarIcon.GetParentTaskbarIcon(this); taskbarIcon.CloseBalloon(); } /// /// If the users hovers over the balloon, we don't close it. /// private void grid_MouseEnter(object sender, MouseEventArgs e) { //if we're already running the fade-out animation, do not interrupt anymore //(makes things too complicated for the sample) if (isClosing) return; //the tray icon assigned this attached property to simplify access TaskbarIcon taskbarIcon = TaskbarIcon.GetParentTaskbarIcon(this); taskbarIcon.ResetBalloonCloseTimer(); } /// /// Closes the popup once the fade-out animation completed. /// The animation was triggered in XAML through the attached /// BalloonClosing event. /// private void OnFadeOutCompleted(object sender, EventArgs e) { Popup pp = (Popup)Parent; pp.IsOpen = false; } } }