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.
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
Wenn Sie einen einfacheren Weg finden, lassen Sie es uns hier wissen. – wkl