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

Wpf 如何在Silverlight中立即显示工具提示?,wpf,silverlight,tooltip,user-experience,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); 这使得用户体验更

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

您需要钩住鼠标指针事件并直接显示它:-

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

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

(反射器提供)

TimeSpan=(TimeSpan)(DateTime.Now-\u lastToolTipOpenedTime);

if(时间跨度比较(跨度,新时间跨度(0,0,0,0,100))您将需要覆盖TextBlock和Tooltip的样式,您可能会看到其中的一些信息,在任何样式中,都会有可视状态组,在更改工具提示的可见性时会有一些延迟,您可以尝试在那里进行自定义。这是一个很好的开始,它通常可以工作,但有时会将工具提示作为重影保留在屏幕上,并且第一个mUSEENTER似乎不起作用,只有第二次可以使用它。很可笑,WPF中的常规方法无法设置它。
    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();
    }