如何在Silverlight中立即显示工具提示?

时间:2010-03-19 15:39:56

标签: wpf silverlight tooltip user-experience

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,有什么方法可以立即显示工具提示?

2 个答案:

答案 0 :(得分: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;
    };

答案 1 :(得分:1)

除了重新实现鼠标输入(或整个工具提示服务)之外,我担心你可能会失败 - 你看到的延迟实际上是硬编码到TooltipService的“OnOwnerMouseEnter”方法中: / p>

(由Reflector提供)

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