Button
Eine Schaltfläche löst mit Klick, Leertaste oder Eingabetaste ihr Click-Ereignis oder ihren Befehl aus. Mit ClickMode.Press schon beim Drücken; ein Befehl, der nicht ausführbar ist, deaktiviert sie.


KXAML
ButtonSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
xmlns:x="https://ui.kuonen.org/kxaml/x"
x:Class="Kuonen.UI.Galerie.Seiten.ButtonVorfuehrung"
Spacing="12">
<!-- Zustände: normal, hervorgehoben (Akzent), deaktiviert. -->
<StackPanel Orientation="Horizontal" Spacing="8">
<Button Content="Klick mich" Click="Normal_Click" />
<Button Content="Speichern" Style="{x:Static Fluent.AkzentButton}" Click="Akzent_Click" />
<Button Content="Deaktiviert" IsEnabled="False" />
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<!-- ClickMode.Press: löst schon beim Drücken aus. -->
<Button Content="Beim Drücken" ClickMode="Press" Click="BeimDruecken_Click" />
<!-- Befehl: das Kästchen steuert, ob er ausführbar ist; die Schaltfläche folgt von selbst (Befehl im Code-Behind). -->
<Button x:Name="MitBefehl" Content="Befehl" />
<CheckBox x:Name="Erlaubt" Content="Befehl erlaubt" IsChecked="True" Click="Erlaubt_Click" />
</StackPanel>
<TextBlock x:Name="Meldung" Text="Noch nichts geklickt." />
</StackPanel>ButtonSeite.kxaml.cs
using Kuonen.UI;
using Kuonen.UI.Befehle;
using Kuonen.UI.Ereignisse;
namespace Kuonen.UI.Galerie.Seiten;
public sealed partial class ButtonSeite
{
protected override Func<UIElement>? KxamlFabrik => () => new ButtonVorfuehrung();
}
/// <summary>KXAML-Fassung der Button-Seite: der Baum steht in ButtonSeite.kxaml, hier nur das Verhalten.</summary>
public sealed partial class ButtonVorfuehrung
{
private readonly RelayCommand _befehl;
private int _klicks;
public ButtonVorfuehrung()
{
InitializeComponent();
_befehl = new RelayCommand(() => Meldung.Text = "Befehl ausgeführt.", () => Erlaubt.IsChecked == true);
MitBefehl.Command = _befehl;
}
private void Normal_Click(object sender, RoutedEventArgs e) => Meldung.Text = $"„Klick mich“ {++_klicks}-mal geklickt.";
private void Akzent_Click(object sender, RoutedEventArgs e) => Meldung.Text = "Akzent-Schaltfläche geklickt.";
private void BeimDruecken_Click(object sender, RoutedEventArgs e) => Meldung.Text = "Schon beim Drücken ausgelöst.";
private void Erlaubt_Click(object sender, RoutedEventArgs e) => _befehl.RaiseCanExecuteChanged();
}C#
ButtonSeite.cs
using Kuonen.UI;
using Kuonen.UI.Befehle;
using Kuonen.UI.Controls;
using Kuonen.UI.Layout;
using Kuonen.UI.Themes;
namespace Kuonen.UI.Galerie.Seiten;
/// <summary>Galerie-Seite: <see cref="Button"/>.</summary>
public sealed partial class ButtonSeite : GalerieSeite
{
public override string Titel => "Button";
public override string Beschreibung =>
"Eine Schaltfläche löst mit Klick, Leertaste oder Eingabetaste ihr Click-Ereignis oder ihren Befehl aus. "
+ "Mit ClickMode.Press schon beim Drücken; ein Befehl, der nicht ausführbar ist, deaktiviert sie.";
public override string Stichworte => "Schaltfläche Klick Click Befehl Command Akzent ClickMode";
public override string Datei => nameof(ButtonSeite);
public override UIElement Baue()
{
var meldung = new TextBlock { Text = "Noch nichts geklickt." };
int klicks = 0;
// Zustände: normal, hervorgehoben (Akzent), deaktiviert.
var normal = new Button { Content = "Klick mich" };
normal.Click += (_, _) => meldung.Text = $"„Klick mich“ {++klicks}-mal geklickt.";
var akzent = new Button { Content = "Speichern", Style = Fluent.AkzentButton };
akzent.Click += (_, _) => meldung.Text = "Akzent-Schaltfläche geklickt.";
var aus = new Button { Content = "Deaktiviert", IsEnabled = false };
var zustaende = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8 };
zustaende.Children.Add(normal);
zustaende.Children.Add(akzent);
zustaende.Children.Add(aus);
// ClickMode.Press: löst schon beim Drücken aus.
var beimDruecken = new Button { Content = "Beim Drücken", ClickMode = ClickMode.Press };
beimDruecken.Click += (_, _) => meldung.Text = "Schon beim Drücken ausgelöst.";
// Befehl: das Kästchen steuert, ob er ausführbar ist; die Schaltfläche folgt von selbst.
var erlaubt = new CheckBox { Content = "Befehl erlaubt", IsChecked = true };
var befehl = new RelayCommand(() => meldung.Text = "Befehl ausgeführt.", () => erlaubt.IsChecked == true);
erlaubt.Click += (_, _) => befehl.RaiseCanExecuteChanged();
var mitBefehl = new Button { Content = "Befehl", Command = befehl };
var weitere = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8 };
weitere.Children.Add(beimDruecken);
weitere.Children.Add(mitBefehl);
weitere.Children.Add(erlaubt);
var seite = new StackPanel { Spacing = 12 };
seite.Children.Add(zustaende);
seite.Children.Add(weitere);
seite.Children.Add(meldung);
return seite;
}
}