2

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

これにより、ユーザーエクスペリエンスが向上します。これは、ユーザーがページ上の5つのアイテムのツールチップを見たい場合、それぞれについてそれほど長い秒待つ必要がないためです。

しかし、SilverlightにはSetInitialShowDelayがないため、ツールチップをすぐに表示するための回避策は何ですか?

4

2 に答える 2

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;
    };
于 2010-03-19T17:37:32.513 に答える
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();
    }
于 2010-03-19T20:25:34.297 に答える