2

WPF中,我得到一个立即出现的工具提示,如下所示:

TextBlock tb = new TextBlock();
tb.Text = name;
ToolTip tt = new ToolTip();
tt.Content = "This is some info on " + name + ".";
tb.ToolTip = tt;
tt.Cursor = Cursors.Help;
ToolTipService.SetInitialShowDelay(tb, 0);

这使得用户体验更好,因为如果用户想要查看页面上五个项目的工具提示,他不必为每个项目等待那么的一秒钟。

但是由于 Silverlight 没有 SetInitialShowDelay,有什么解决方法可以让工具提示立即出现?

4

2 回答 2

2

您需要挂钩 MouseEnter 事件并自己立即显示它:-

    TextBlock tb = new TextBlock(); 
    tb.Text = name; 
    ToolTip tt = new ToolTip(); 
    tt.Content = "This is some info on " + name + "."; 
    ToolTipService.SetToolTip(tb, tt);
    tb.MouseEnter += (s, args) => {  
      ((ToolTip)ToolTipService.GetToolTip((DependencyObject)s)).IsOpen = true;
    };
于 2010-03-19T17:37:32.513 回答
1

除了重新实现鼠标输入(或整个工具提示服务)之外,恐怕您可能不走运 - 您看到的延迟实际上是硬编码到 TooltipService 的“OnOwnerMouseEnter”方法中的:

(由反射器提供)

    TimeSpan span = (TimeSpan) (DateTime.Now - _lastToolTipOpenedTime);
    if (TimeSpan.Compare(span, new TimeSpan(0, 0, 0, 0, 100)) <= 0)
    {
        OpenAutomaticToolTip(null, EventArgs.Empty);
    }
    else
    {
        if (_openTimer == null)
        {
            _openTimer = new DispatcherTimer();
            _openTimer.Tick += new EventHandler(ToolTipService.OpenAutomaticToolTip);
        }
        _openTimer.Interval = new TimeSpan(0, 0, 0, 0, 400);
        _openTimer.Start();
    }
于 2010-03-19T20:25:34.297 回答