Zum Inhalt
Kuonen.UI

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.

Vorführung: ButtonVorführung: Button

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