Zum Inhalt
Kuonen.UI

ToggleButton

Eine Schaltfläche, die eingerastet bleibt: IsChecked wechselt mit jedem Klick zwischen falsch und wahr, mit IsThreeState auch über null (unbestimmt). Checked, Unchecked und Indeterminate melden jeden Wechsel.

Vorführung: ToggleButtonVorführung: ToggleButton

KXAML

ToggleButtonSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
            xmlns:x="https://ui.kuonen.org/kxaml/x"
            x:Class="Kuonen.UI.Galerie.Seiten.ToggleButtonVorfuehrung"
            Spacing="12">
  <StackPanel Orientation="Horizontal" Spacing="8">
    <ToggleButton Content="Fett" Checked="Fett_Checked" Unchecked="Fett_Unchecked" />
    <!-- Drei Zustände: falsch → wahr → unbestimmt (null) → falsch. -->
    <ToggleButton Content="Drei Zustände" IsThreeState="True"
                  Checked="Drei_Checked" Unchecked="Drei_Unchecked" Indeterminate="Drei_Indeterminate" />
    <ToggleButton Content="Deaktiviert, an" IsChecked="True" IsEnabled="False" />
    <ToggleButton Content="Deaktiviert, aus" IsEnabled="False" />
  </StackPanel>
  <TextBlock x:Name="Meldung" Text="Noch nichts umgeschaltet." />
</StackPanel>
ToggleButtonSeite.kxaml.cs
using Kuonen.UI;
using Kuonen.UI.Ereignisse;

namespace Kuonen.UI.Galerie.Seiten;

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

/// <summary>KXAML-Fassung der ToggleButton-Seite: der Baum steht in ToggleButtonSeite.kxaml, hier nur das Verhalten.</summary>
public sealed partial class ToggleButtonVorfuehrung
{
    public ToggleButtonVorfuehrung() => InitializeComponent();

    private void Fett_Checked(object sender, RoutedEventArgs e) => Meldung.Text = "„Fett“ ist eingerastet (Checked).";

    private void Fett_Unchecked(object sender, RoutedEventArgs e) => Meldung.Text = "„Fett“ ist gelöst (Unchecked).";

    private void Drei_Checked(object sender, RoutedEventArgs e) => Meldung.Text = "„Drei Zustände“ ist eingerastet (Checked).";

    private void Drei_Unchecked(object sender, RoutedEventArgs e) => Meldung.Text = "„Drei Zustände“ ist gelöst (Unchecked).";

    private void Drei_Indeterminate(object sender, RoutedEventArgs e) => Meldung.Text = "„Drei Zustände“ ist unbestimmt (Indeterminate).";
}

C#

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

namespace Kuonen.UI.Galerie.Seiten;

/// <summary>Galerie-Seite: <see cref="ToggleButton"/>.</summary>
public sealed partial class ToggleButtonSeite : GalerieSeite
{
    public override string Titel => "ToggleButton";

    public override string Beschreibung =>
        "Eine Schaltfläche, die eingerastet bleibt: IsChecked wechselt mit jedem Klick zwischen falsch und wahr, mit "
        + "IsThreeState auch über null (unbestimmt). Checked, Unchecked und Indeterminate melden jeden Wechsel.";

    public override string Stichworte => "Umschalter Umschaltfläche eingerastet IsChecked IsThreeState Checked Unchecked Indeterminate";

    public override string Datei => nameof(ToggleButtonSeite);

    public override UIElement Baue()
    {
        var meldung = new TextBlock { Text = "Noch nichts umgeschaltet." };

        var fett = new ToggleButton { Content = "Fett" };
        fett.Checked += (_, _) => meldung.Text = "„Fett“ ist eingerastet (Checked).";
        fett.Unchecked += (_, _) => meldung.Text = "„Fett“ ist gelöst (Unchecked).";

        // Drei Zustände: falsch → wahr → unbestimmt (null) → falsch.
        var drei = new ToggleButton { Content = "Drei Zustände", IsThreeState = true };
        drei.Checked += (_, _) => meldung.Text = "„Drei Zustände“ ist eingerastet (Checked).";
        drei.Unchecked += (_, _) => meldung.Text = "„Drei Zustände“ ist gelöst (Unchecked).";
        drei.Indeterminate += (_, _) => meldung.Text = "„Drei Zustände“ ist unbestimmt (Indeterminate).";

        var ausAn = new ToggleButton { Content = "Deaktiviert, an", IsChecked = true, IsEnabled = false };
        var ausAus = new ToggleButton { Content = "Deaktiviert, aus", IsEnabled = false };

        var reihe = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8 };
        reihe.Children.Add(fett);
        reihe.Children.Add(drei);
        reihe.Children.Add(ausAn);
        reihe.Children.Add(ausAus);

        var seite = new StackPanel { Spacing = 12 };
        seite.Children.Add(reihe);
        seite.Children.Add(meldung);
        return seite;
    }
}