Browse Source

prevent tooltipgetting stuck.

pull/4407/head
Dan Walmsley 6 years ago
parent
commit
49e41b9594
  1. 1
      src/Avalonia.Controls/ToolTip.cs
  2. 15
      src/Avalonia.Controls/ToolTipService.cs

1
src/Avalonia.Controls/ToolTip.cs

@ -66,6 +66,7 @@ namespace Avalonia.Controls
static ToolTip()
{
TipProperty.Changed.Subscribe(ToolTipService.Instance.TipChanged);
IsOpenProperty.Changed.Subscribe(ToolTipService.Instance.TipOpenChanged);
IsOpenProperty.Changed.Subscribe(IsOpenChanged);
}

15
src/Avalonia.Controls/ToolTipService.cs

@ -28,20 +28,33 @@ namespace Avalonia.Controls
{
control.PointerEnter -= ControlPointerEnter;
control.PointerLeave -= ControlPointerLeave;
control.DetachedFromVisualTree -= ControlDetaching;
}
if (e.NewValue != null)
{
control.PointerEnter += ControlPointerEnter;
control.PointerLeave += ControlPointerLeave;
}
}
internal void TipOpenChanged(AvaloniaPropertyChangedEventArgs e)
{
var control = (Control)e.Sender;
if (e.OldValue is false && e.NewValue is true)
{
control.DetachedFromVisualTree += ControlDetaching;
}
else if(e.OldValue is true && e.NewValue is false)
{
control.DetachedFromVisualTree -= ControlDetaching;
}
}
private void ControlDetaching(object sender, VisualTreeAttachmentEventArgs e)
{
var control = (Control)sender;
control.DetachedFromVisualTree -= ControlDetaching;
Close(control);
}

Loading…
Cancel
Save