Browse Source

Recalculate ToolTip position on target bounds changed

pull/5250/head
Max Katz 6 years ago
parent
commit
3140c1c15e
  1. 13
      src/Avalonia.Controls/ToolTipService.cs

13
src/Avalonia.Controls/ToolTipService.cs

@ -28,12 +28,14 @@ namespace Avalonia.Controls
{ {
control.PointerEnter -= ControlPointerEnter; control.PointerEnter -= ControlPointerEnter;
control.PointerLeave -= ControlPointerLeave; control.PointerLeave -= ControlPointerLeave;
control.PropertyChanged -= Control_PropertyChanged;
} }
if (e.NewValue != null) if (e.NewValue != null)
{ {
control.PointerEnter += ControlPointerEnter; control.PointerEnter += ControlPointerEnter;
control.PointerLeave += ControlPointerLeave; control.PointerLeave += ControlPointerLeave;
control.PropertyChanged += Control_PropertyChanged;
} }
if (ToolTip.GetIsOpen(control) && e.NewValue != e.OldValue && !(e.NewValue is ToolTip)) if (ToolTip.GetIsOpen(control) && e.NewValue != e.OldValue && !(e.NewValue is ToolTip))
@ -97,6 +99,17 @@ namespace Avalonia.Controls
Close(control); Close(control);
} }
private void Control_PropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e)
{
var control = (Control)sender;
if (e.Property == Visual.TransformedBoundsProperty)
{
var toolTip = control.GetValue(ToolTip.ToolTipProperty);
toolTip?.RecalculatePosition(control);
}
}
private void StartShowTimer(int showDelay, Control control) private void StartShowTimer(int showDelay, Control control)
{ {
_timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(showDelay) }; _timer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(showDelay) };

Loading…
Cancel
Save