Как заставить всплывающую подсказку сразу появиться в Silverlight? - PullRequest
2 голосов
/ 19 марта 2010

В 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 ]

2 голосов
/ 19 марта 2010

Вам нужно подключить событие 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 голос
/ 19 марта 2010

Кроме повторной реализации ввода мыши (или всей службы всплывающих подсказок), я боюсь, что вам может не повезти - задержка, которую вы видите, фактически жестко запрограммирована в методе OnOwnerMouseEnter в TooltipService:

(любезно предоставлено 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();
    }
...