Silverlight中的动态工具提示

时间:2014-05-16 17:19:39

标签: silverlight xaml tooltip silverlight-5.0

我有一个工具提示,我必须通过以下代码设置:

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;
}

第一次进入btnTest时,工具提示会被创建并与btnTest相关联。然后我们需要设置IsOpen = true以立即显示工具提示。

当鼠标离开按钮时,它会设置IsOpen = false

这个工作正常,但我的btnTest可能会在任何时候消失,所以如果我们设置它的Visibility = Collapsed而#34; first"打开工具提示,工具提示将保持打开状态(永远不会调用MouseLeave)

1 个答案:

答案 0 :(得分:2)

使用Unloaded事件。无论是从视图中删除按钮还是仅设置为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();
}