diff --git a/src/Avalonia.Controls.DataGrid/Themes/Default.xaml b/src/Avalonia.Controls.DataGrid/Themes/Default.xaml
index 93e18548ce..cf062e0920 100644
--- a/src/Avalonia.Controls.DataGrid/Themes/Default.xaml
+++ b/src/Avalonia.Controls.DataGrid/Themes/Default.xaml
@@ -201,7 +201,6 @@
-
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..341ab2fe81 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 (ToolTip.GetIsOpen(control) && e.NewValue != e.OldValue && !(e.NewValue is ToolTip))
+ {
+ var tip = control.GetValue(ToolTip.ToolTipProperty);
+
+ tip.Content = e.NewValue;
+ }
}
internal void TipOpenChanged(AvaloniaPropertyChangedEventArgs e)
diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs
index 764d699658..d4b988acd4 100644
--- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs
+++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs
@@ -71,7 +71,7 @@ namespace Avalonia.Diagnostics.ViewModels
if (o is AvaloniaObject ao)
{
return AvaloniaPropertyRegistry.Instance.GetRegistered(ao)
- .Concat(AvaloniaPropertyRegistry.Instance.GetRegisteredAttached(ao.GetType()))
+ .Union(AvaloniaPropertyRegistry.Instance.GetRegisteredAttached(ao.GetType()))
.Select(x => new AvaloniaPropertyViewModel(ao, x));
}
else
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()