2010-03-19 101 views
2

WPF,我得到一個提示出現立即這樣的:如何在Silverlight中立即顯示工具提示?

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,什麼是使工具提示立即出現的解決方法?

+0

你需要重寫TextBlock和Tooltip的樣式,並且你可能會有一些信息,在任何樣式中,都會有Visual State Group在改變工具提示的可見性方面有一些延遲,你可以嘗試在那裏定製。 – 2010-03-19 16:51:54

回答

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

這是一個很好的開始,它通常工作,但有時會在屏幕上將工具提示作爲幻影留在屏幕上,而第一個mouseenter似乎不起作用,只有第二次,才能用於此 – 2010-03-19 17:49:22

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

這太荒謬了,不能用在WPF中可用的常規方法。 – JeroenEijkhof 2010-09-03 04:47:39