From 5580e0f54b107afd3b216966626cdce115e75c37 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 28 Aug 2020 11:01:05 +0100 Subject: [PATCH 1/3] add failing unit test. --- .../ToolTipTests.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs b/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs index e52e7a487b..9279e78013 100644 --- a/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs @@ -124,6 +124,35 @@ namespace Avalonia.Controls.UnitTests Assert.True(ToolTip.GetIsOpen(target)); } } + + [Fact] + public void Content_Should_Update_When_Tip_Property_Changes_And_Already_Open() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var window = new Window(); + + var target = new Decorator() + { + [ToolTip.TipProperty] = "Tip", + [ToolTip.ShowDelayProperty] = 0 + }; + + window.Content = target; + + window.ApplyTemplate(); + window.Presenter.ApplyTemplate(); + + _mouseHelper.Enter(target); + + Assert.True(ToolTip.GetIsOpen(target)); + Assert.Equal("Tip", target.GetValue(ToolTip.ToolTipProperty).Content); + + + ToolTip.SetTip(target, "Tip1"); + Assert.Equal("Tip1", target.GetValue(ToolTip.ToolTipProperty).Content); + } + } [Fact] public void Should_Open_On_Pointer_Enter_With_Delay() From 3c369153c25d3b18aaf7e5c6a3852d982097a477 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 28 Aug 2020 11:01:48 +0100 Subject: [PATCH 2/3] update tooltip content when already opened and tip changes. --- src/Avalonia.Controls/ToolTip.cs | 2 +- src/Avalonia.Controls/ToolTipService.cs | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/ToolTip.cs b/src/Avalonia.Controls/ToolTip.cs index cf0652247f..d56ff5752f 100644 --- a/src/Avalonia.Controls/ToolTip.cs +++ b/src/Avalonia.Controls/ToolTip.cs @@ -55,7 +55,7 @@ namespace Avalonia.Controls /// /// Stores the current instance in the control. /// - private static readonly AttachedProperty ToolTipProperty = + internal static readonly AttachedProperty ToolTipProperty = AvaloniaProperty.RegisterAttached("ToolTip"); private IPopupHost _popup; diff --git a/src/Avalonia.Controls/ToolTipService.cs b/src/Avalonia.Controls/ToolTipService.cs index e2a0f9e50c..92d2e7cbfe 100644 --- a/src/Avalonia.Controls/ToolTipService.cs +++ b/src/Avalonia.Controls/ToolTipService.cs @@ -35,6 +35,13 @@ namespace Avalonia.Controls control.PointerEnter += ControlPointerEnter; control.PointerLeave += ControlPointerLeave; } + + if (e.NewValue != e.OldValue && ToolTip.GetIsOpen(control)) + { + var tip = control.GetValue(ToolTip.ToolTipProperty); + + tip.Content = e.NewValue; + } } internal void TipOpenChanged(AvaloniaPropertyChangedEventArgs e) From 03a1eae221cfee2d941f197bd43b142c4f19e491 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 28 Aug 2020 18:10:25 +0100 Subject: [PATCH 3/3] just check newvalue isnt tooltip. --- src/Avalonia.Controls/ToolTipService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/ToolTipService.cs b/src/Avalonia.Controls/ToolTipService.cs index 92d2e7cbfe..341ab2fe81 100644 --- a/src/Avalonia.Controls/ToolTipService.cs +++ b/src/Avalonia.Controls/ToolTipService.cs @@ -36,7 +36,7 @@ namespace Avalonia.Controls control.PointerLeave += ControlPointerLeave; } - if (e.NewValue != e.OldValue && ToolTip.GetIsOpen(control)) + if (ToolTip.GetIsOpen(control) && e.NewValue != e.OldValue && !(e.NewValue is ToolTip)) { var tip = control.GetValue(ToolTip.ToolTipProperty);