Browse Source
Merge pull request #4296 from AvaloniaUI/fixes/tooltip-must-close-when-detached-from-visual-tree
Fixes/tooltip must close when detached from visual tree
pull/4301/head
danwalmsley
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
42 additions and
0 deletions
-
src/Avalonia.Controls/ToolTipService.cs
-
tests/Avalonia.Controls.UnitTests/ToolTipTests.cs
|
|
|
@ -28,14 +28,22 @@ namespace Avalonia.Controls |
|
|
|
{ |
|
|
|
control.PointerEnter -= ControlPointerEnter; |
|
|
|
control.PointerLeave -= ControlPointerLeave; |
|
|
|
control.DetachedFromVisualTree -= ControlDetaching; |
|
|
|
} |
|
|
|
|
|
|
|
if (e.NewValue != null) |
|
|
|
{ |
|
|
|
control.PointerEnter += ControlPointerEnter; |
|
|
|
control.PointerLeave += ControlPointerLeave; |
|
|
|
control.DetachedFromVisualTree += ControlDetaching; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void ControlDetaching(object sender, VisualTreeAttachmentEventArgs e) |
|
|
|
{ |
|
|
|
var control = (Control)sender; |
|
|
|
Close(control); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Called when the pointer enters a control with an attached tooltip.
|
|
|
|
|
|
|
|
@ -30,6 +30,40 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
|
|
|
|
Assert.False(ToolTip.GetIsOpen(control)); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_Close_When_Control_Detaches() |
|
|
|
{ |
|
|
|
using (UnitTestApplication.Start(TestServices.StyledWindow)) |
|
|
|
{ |
|
|
|
var window = new Window(); |
|
|
|
|
|
|
|
var panel = new Panel(); |
|
|
|
|
|
|
|
var target = new Decorator() |
|
|
|
{ |
|
|
|
[ToolTip.TipProperty] = "Tip", |
|
|
|
[ToolTip.ShowDelayProperty] = 0 |
|
|
|
}; |
|
|
|
|
|
|
|
panel.Children.Add(target); |
|
|
|
|
|
|
|
window.Content = panel; |
|
|
|
|
|
|
|
window.ApplyTemplate(); |
|
|
|
window.Presenter.ApplyTemplate(); |
|
|
|
|
|
|
|
Assert.True((target as IVisual).IsAttachedToVisualTree); |
|
|
|
|
|
|
|
_mouseHelper.Enter(target); |
|
|
|
|
|
|
|
Assert.True(ToolTip.GetIsOpen(target)); |
|
|
|
|
|
|
|
panel.Children.Remove(target); |
|
|
|
|
|
|
|
Assert.False(ToolTip.GetIsOpen(target)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_Open_On_Pointer_Enter() |
|
|
|
|