我有一个工具提示,我必须通过以下代码设置:
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)
答案 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();
}