Zum Inhalt
Kuonen.UI

ToolTip

Eine QuickInfo erscheint, wenn der Zeiger ruht: nach InitialShowDelay (400 ms), für ShowDuration (5 s). Sie verschwindet beim Verlassen, Klicken, Rad und Tasten. Inhalt ist ein Text oder ein ganzer Baum; ein Text ist zugleich der Hilfetext für Bildschirmleser.

Vorführung: ToolTipVorführung: ToolTip

KXAML

ToolTipSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
            xmlns:x="https://ui.kuonen.org/kxaml/x"
            x:Class="Kuonen.UI.Galerie.Seiten.ToolTipVorfuehrung"
            Spacing="12">
  <StackPanel Orientation="Horizontal" Spacing="8">
    <!-- Text als QuickInfo. -->
    <Button Content="Speichern" ToolTipService.ToolTip="Speichert das Dokument (Strg+S)." />
    <!-- Sofort und lange sichtbar. -->
    <Button Content="Sofort" ToolTipService.ToolTip="Ohne Wartezeit, 10 Sekunden lang."
            ToolTipService.InitialShowDelay="0" ToolTipService.ShowDuration="10000" />
    <!-- Ein ganzer Baum als Inhalt. -->
    <Button Content="Mit Inhalt">
      <ToolTipService.ToolTip>
        <ToolTip>
          <StackPanel Spacing="4">
            <TextBlock Text="Formatieren" FontWeight="SemiBold" />
            <TextBlock Text="Fett, kursiv und unterstrichen&#10;für die Auswahl umschalten." />
          </StackPanel>
        </ToolTip>
      </ToolTipService.ToolTip>
    </Button>
    <!-- Ein deaktiviertes Element zeigt keine QuickInfo: der Zeiger geht durch. -->
    <Button Content="Deaktiviert" IsEnabled="False" ToolTipService.ToolTip="Wird nie gezeigt." />
  </StackPanel>
  <TextBlock Text="Den Zeiger über einer Schaltfläche ruhen lassen." TextWrapping="Wrap" />
</StackPanel>
ToolTipSeite.kxaml.cs
using Kuonen.UI;

namespace Kuonen.UI.Galerie.Seiten;

public sealed partial class ToolTipSeite
{
    protected override Func<UIElement>? KxamlFabrik => () => new ToolTipVorfuehrung();
}

/// <summary>KXAML-Fassung der ToolTip-Seite: alles steht in ToolTipSeite.kxaml; Verhalten braucht es keines.</summary>
public sealed partial class ToolTipVorfuehrung
{
    public ToolTipVorfuehrung() => InitializeComponent();
}

C#

ToolTipSeite.cs
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Layout;

namespace Kuonen.UI.Galerie.Seiten;

/// <summary>Galerie-Seite: <see cref="ToolTip"/> und <see cref="ToolTipService"/>.</summary>
public sealed partial class ToolTipSeite : GalerieSeite
{
    public override string Titel => "ToolTip";

    public override string Beschreibung =>
        "Eine QuickInfo erscheint, wenn der Zeiger ruht: nach InitialShowDelay (400 ms), für ShowDuration (5 s). Sie "
        + "verschwindet beim Verlassen, Klicken, Rad und Tasten. Inhalt ist ein Text oder ein ganzer Baum; ein Text "
        + "ist zugleich der Hilfetext für Bildschirmleser.";

    public override string Stichworte => "QuickInfo Hinweis Tooltip ToolTipService InitialShowDelay ShowDuration Hilfetext";

    public override string Datei => nameof(ToolTipSeite);

    public override UIElement Baue()
    {
        // Text als QuickInfo.
        var speichern = new Button { Content = "Speichern" };
        ToolTipService.SetToolTip(speichern, "Speichert das Dokument (Strg+S).");

        // Sofort und lange sichtbar.
        var sofort = new Button { Content = "Sofort" };
        ToolTipService.SetToolTip(sofort, "Ohne Wartezeit, 10 Sekunden lang.");
        ToolTipService.SetInitialShowDelay(sofort, 0);
        ToolTipService.SetShowDuration(sofort, 10_000);

        // Ein ganzer Baum als Inhalt.
        var reich = new Button { Content = "Mit Inhalt" };
        var blase = new StackPanel { Spacing = 4 };
        blase.Children.Add(new TextBlock { Text = "Formatieren", FontWeight = 600 });
        blase.Children.Add(new TextBlock { Text = "Fett, kursiv und unterstrichen\nfür die Auswahl umschalten." });
        ToolTipService.SetToolTip(reich, new ToolTip { Content = blase });

        // Ein deaktiviertes Element zeigt keine QuickInfo: der Zeiger geht durch.
        var aus = new Button { Content = "Deaktiviert", IsEnabled = false };
        ToolTipService.SetToolTip(aus, "Wird nie gezeigt.");

        var reihe = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8 };
        reihe.Children.Add(speichern);
        reihe.Children.Add(sofort);
        reihe.Children.Add(reich);
        reihe.Children.Add(aus);

        var seite = new StackPanel { Spacing = 12 };
        seite.Children.Add(reihe);
        seite.Children.Add(new TextBlock { Text = "Den Zeiger über einer Schaltfläche ruhen lassen.", TextWrapping = TextWrapping.Wrap });
        return seite;
    }
}