Reputation: 4076
I have a tooltip that I have to set through code like that :
private ToolTip _tooltip;
private void btnTest_MouseEnter(object sender, MouseEventArgs e)
{
if (_tooltip == null)
{
_tooltip = CreateToolTip();
ToolTipService.SetToolTip(btnTest, _tooltip);
_tooltip.IsOpen = true;
}
}
private void btnTest_MouseLeave(object sender, MouseEventArgs e)
{
if (_tooltip != null)
_tooltip.IsOpen = false;
}
The first time it enters the btnTest, the tooltip gets create and is associated to btnTest. Then we need to set IsOpen = true
to show the tooltip immediately.
When the mouse leaves the button it sets IsOpen = false
.
This is working fine, but my btnTest is likely to disapear at anytime, so if we set its Visibility = Collapsed while the "first" tooltip is opened, the tooltip will remain opened (the MouseLeave will never be called)
Upvotes: 0
Views: 441
Reputation: 6136
Use the Unloaded
event. It will be fired no matter whether the button is removed from the view or just set to Collapsed
.
private ToolTip _tooltip;
private void btnTest_MouseEnter(object sender, MouseEventArgs e)
{
if (_tooltip == null)
{
_tooltip = CreateToolTip();
ToolTipService.SetToolTip(btnTest, _tooltip);
btnTest.Unloaded += CloseAndDetachTooltip;
}
_tooltip.IsOpen = true;
}
private void CloseAndDetachTooltip(object sender, EventArgs args)
{
TryCloseTooltip();
ToolTipService.SetToolTip(btnTest, null);
_tooltip = null;
}
private void TryCloseTooltip()
{
if (_tooltip != null) _tooltip.IsOpen = false;
}
private void btnTest_MouseLeave(object sender, MouseEventArgs e)
{
TryCloseTooltip();
}
Upvotes: 2