diff --git a/src/Avalonia.Controls/ToolTipService.cs b/src/Avalonia.Controls/ToolTipService.cs index d40a116dd5..9e0bf60f42 100644 --- a/src/Avalonia.Controls/ToolTipService.cs +++ b/src/Avalonia.Controls/ToolTipService.cs @@ -28,14 +28,12 @@ namespace Avalonia.Controls { control.PointerEnter -= ControlPointerEnter; control.PointerLeave -= ControlPointerLeave; - control.PropertyChanged -= Control_PropertyChanged; } if (e.NewValue != null) { control.PointerEnter += ControlPointerEnter; control.PointerLeave += ControlPointerLeave; - control.PropertyChanged += Control_PropertyChanged; } if (ToolTip.GetIsOpen(control) && e.NewValue != e.OldValue && !(e.NewValue is ToolTip)) @@ -53,10 +51,12 @@ namespace Avalonia.Controls if (e.OldValue is false && e.NewValue is true) { control.DetachedFromVisualTree += ControlDetaching; + control.EffectiveViewportChanged += ControlEffectiveViewportChanged; } else if(e.OldValue is true && e.NewValue is false) { control.DetachedFromVisualTree -= ControlDetaching; + control.EffectiveViewportChanged -= ControlEffectiveViewportChanged; } } @@ -64,6 +64,7 @@ namespace Avalonia.Controls { var control = (Control)sender; control.DetachedFromVisualTree -= ControlDetaching; + control.EffectiveViewportChanged -= ControlEffectiveViewportChanged; Close(control); } @@ -99,15 +100,11 @@ namespace Avalonia.Controls Close(control); } - private void Control_PropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e) + private void ControlEffectiveViewportChanged(object sender, Layout.EffectiveViewportChangedEventArgs e) { var control = (Control)sender; - - if (e.Property == Visual.BoundsProperty) - { - var toolTip = control.GetValue(ToolTip.ToolTipProperty); - toolTip?.RecalculatePosition(control); - } + var toolTip = control.GetValue(ToolTip.ToolTipProperty); + toolTip?.RecalculatePosition(control); } private void StartShowTimer(int showDelay, Control control)