Wpf 如何在Silverlight中立即显示工具提示?
在WPF中,我会得到一个工具提示,立即出现,如下所示: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); 这使得用户体验更
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();
}