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.


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