2016-07-26 39 views

Antwort

2

ich so etwas wie diese verwenden würde:

class ToolTipHelper 
{ 
    private readonly ToolTip _toolTip; 
    private readonly Timer _timer; 

    /// <summary> 
    /// Creates an instance 
    /// </summary> 
    public ToolTipHelper() 
    { 
     _toolTip = new ToolTip(); 
     _timer = new Timer { AutoReset = false}; 
     _timer.Elapsed += ShowToolTip; 
    } 

    /// <summary> 
    /// Gets or sets the text for the tooltip. 
    /// </summary> 
    public object ToolTipContent { get{ return _toolTip.Content; } set{ _toolTip.Content = value; } } 

    /// <summary> 
    /// To be called when the mouse enters the ui area. 
    /// </summary> 
    public void OnMouseEnter(object sender, MouseEventArgs e) 
    { 
     _timer.Interval = ToolTipService.GetInitialShowDelay(Application.Current.MainWindow); 
     _timer.Start(); 
    } 

    private void ShowToolTip(object sender, ElapsedEventArgs e) 
    { 
     _timer.Stop(); 
     if (_toolTip != null) 
      _toolTip.Dispatcher.Invoke(new Action(() => { _toolTip.IsOpen = true; })); 
    } 

    /// <summary> 
    /// To be called when the mouse leaves the ui area. 
    /// </summary> 
    public void OnMouseLeave(object sender, MouseEventArgs e) 
    { 
     _timer.Stop(); 
     if (_toolTip != null) 
      _toolTip.IsOpen = false; 
    } 

Ändern Sie dann Teapot wie folgt aus:

class Teapot 
{ 
    private readonly _tooltipHelper = new ToolTipHelper{ ToolTipContent = "MyToolTip" }; // keep the ToolTipHelper during the life of your Teapot but replace the Content whenever you want 

    private ModelUIElement3D _uiModel; // this has to be created and have its Model set to the suitable GeometryModel3D. You may want to replace an existing ModelVisual3D by this. 

    public Teapot(/*...*/) 
    { 
     _uiModel.MouseEnter += tooltipHelper.OnMouseEnter; 
     _uiModel.MouseLeave += tooltipHelper.OnMouseLeave; 

     //... 
    } 

    // ... 
} 

Es sollte nicht schwierig sein, dies zu ändern, für die Festlegung des Inhalts der Tooltip in Xaml, wenn Sie möchten.

+0

Interessant, ich dachte, es sollte viel einfacher sein, da es so eine triviale Aufgabe ist. Danke für die Lösung, werde es ausprobieren :) – HuyNA

+0

Wenn Sie einen einfacheren Weg finden, lassen Sie es uns hier wissen. – wkl