danbord
danbord

Reputation: 4076

Dynamic Tooltip in Silverlight

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

Answers (1)

Martin
Martin

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

Related Questions