Tastenkürzel
Tastenkürzel hängen als KeyBinding an einem Element (InputBindings). Eine Taste, die kein Control selbst behandelt, steigt vom Fokus auf; die nächste passende Bindung mit ausführbarem Befehl führt aus. Gesten liest KeyGesture aus Text wie „Ctrl+S“ und zeigt sie je Plattform („Strg+S“, auf macOS „⌘S“).


KXAML
TastenkuerzelSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
xmlns:x="https://ui.kuonen.org/kxaml/x"
x:Class="Kuonen.UI.Galerie.Seiten.TastenkuerzelVorfuehrung"
Spacing="12">
<StackPanel.InputBindings>
<!-- Die Befehle setzt das Code-Behind. -->
<KeyBinding x:Name="Speichern" Gesture="Ctrl+S" />
<KeyBinding x:Name="Aktualisieren" Gesture="F5" />
<KeyBinding x:Name="Neu" Gesture="Ctrl+Shift+N" />
</StackPanel.InputBindings>
<TextBlock Text="Strg+S speichert, F5 aktualisiert, Strg+Umschalt+N legt neu an. Der Fokus darf im Textfeld liegen." TextWrapping="Wrap" />
<TextBox Width="240" HorizontalAlignment="Left" PlaceholderText="Hier tippen" />
<TextBlock x:Name="Meldung" Text="Noch kein Kürzel gedrückt." />
</StackPanel>TastenkuerzelSeite.kxaml.cs
using Kuonen.UI;
namespace Kuonen.UI.Galerie.Seiten;
public sealed partial class TastenkuerzelSeite
{
protected override Func<UIElement>? KxamlFabrik => () => new TastenkuerzelVorfuehrung();
}
/// <summary>KXAML-Fassung der Seite Tastenkürzel: der Baum und die Gesten stehen in TastenkuerzelSeite.kxaml, hier die Befehle.</summary>
public sealed partial class TastenkuerzelVorfuehrung
{
public TastenkuerzelVorfuehrung()
{
InitializeComponent();
Speichern.Command = TastenkuerzelSeite.Befehl(Meldung, "Gespeichert (Strg+S).");
Aktualisieren.Command = TastenkuerzelSeite.Befehl(Meldung, "Aktualisiert (F5).");
Neu.Command = TastenkuerzelSeite.Befehl(Meldung, "Neu angelegt (Strg+Umschalt+N).");
}
}C#
TastenkuerzelSeite.cs
using System.Windows.Input;
using Kuonen.UI;
using Kuonen.UI.Befehle;
using Kuonen.UI.Controls;
using Kuonen.UI.Eingabe;
using Kuonen.UI.Layout;
namespace Kuonen.UI.Galerie.Seiten;
/// <summary>Galerie-Seite: Tastenkürzel mit <see cref="KeyBinding"/> und <see cref="UIElement.InputBindings"/>.</summary>
public sealed partial class TastenkuerzelSeite : GalerieSeite
{
public override string Titel => "Tastenkürzel";
public override string Beschreibung =>
"Tastenkürzel hängen als KeyBinding an einem Element (InputBindings). Eine Taste, die kein Control selbst behandelt, steigt vom Fokus auf; die "
+ "nächste passende Bindung mit ausführbarem Befehl führt aus. Gesten liest KeyGesture aus Text wie „Ctrl+S“ und zeigt sie je Plattform "
+ "(„Strg+S“, auf macOS „⌘S“).";
public override string Stichworte => "Tastenkürzel Kürzel Shortcut KeyBinding KeyGesture InputBindings Befehl Command Strg F5 Accelerator";
public override string Datei => nameof(TastenkuerzelSeite);
/// <summary>Ein Befehl, der die Meldung setzt.</summary>
internal static ICommand Befehl(TextBlock meldung, string text) => new RelayCommand(() => meldung.Text = text);
public override UIElement Baue()
{
var meldung = new TextBlock { Text = "Noch kein Kürzel gedrückt." };
var seite = new StackPanel { Spacing = 12 };
seite.Children.Add(new TextBlock
{
Text = "Strg+S speichert, F5 aktualisiert, Strg+Umschalt+N legt neu an. Der Fokus darf im Textfeld liegen.",
TextWrapping = TextWrapping.Wrap,
});
seite.Children.Add(new TextBox { Width = 240, HorizontalAlignment = HorizontalAlignment.Left, PlaceholderText = "Hier tippen" });
seite.Children.Add(meldung);
seite.InputBindings.Add(new KeyBinding(Befehl(meldung, "Gespeichert (Strg+S)."), KeyGesture.Parse("Ctrl+S")));
seite.InputBindings.Add(new KeyBinding(Befehl(meldung, "Aktualisiert (F5)."), KeyGesture.Parse("F5")));
seite.InputBindings.Add(new KeyBinding(Befehl(meldung, "Neu angelegt (Strg+Umschalt+N)."), KeyGesture.Parse("Ctrl+Shift+N")));
return seite;
}
}