RepeatButton
Eine Schaltfläche, die gedrückt gehalten ihr Click-Ereignis wiederholt: zuerst nach Delay, dann alle Interval Millisekunden. Gut für Zähler und Bildlaufpfeile.


KXAML
RepeatButtonSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
xmlns:x="https://ui.kuonen.org/kxaml/x"
x:Class="Kuonen.UI.Galerie.Seiten.RepeatButtonVorfuehrung"
Spacing="12">
<!-- Standard: 400 ms bis zur ersten Wiederholung, dann alle 50 ms. -->
<StackPanel Orientation="Horizontal" Spacing="8">
<RepeatButton Content="−" Width="40" Click="Weniger_Click" />
<TextBlock x:Name="Anzeige" Text="0" FontSize="20" MinWidth="48" TextAlignment="Mitte" VerticalAlignment="Center" />
<RepeatButton Content="+" Width="40" Click="Mehr_Click" />
</StackPanel>
<!-- Eigene Zeiten: sofort und langsam wiederholen. -->
<StackPanel Orientation="Horizontal" Spacing="8">
<RepeatButton Content="+10 (langsam)" Delay="0" Interval="400" Click="Langsam_Click" />
<Button Content="Auf 0" Click="Zurueck_Click" />
<RepeatButton Content="Deaktiviert" IsEnabled="False" />
</StackPanel>
<TextBlock Text="Gedrückt halten: der Wert läuft weiter, bis die Taste losgelassen wird." TextWrapping="Wrap" />
</StackPanel>RepeatButtonSeite.kxaml.cs
using System.Globalization;
using Kuonen.UI;
using Kuonen.UI.Ereignisse;
namespace Kuonen.UI.Galerie.Seiten;
public sealed partial class RepeatButtonSeite
{
protected override Func<UIElement>? KxamlFabrik => () => new RepeatButtonVorfuehrung();
}
/// <summary>KXAML-Fassung der RepeatButton-Seite: der Baum steht in RepeatButtonSeite.kxaml, hier nur das Verhalten.</summary>
public sealed partial class RepeatButtonVorfuehrung
{
private int _wert;
public RepeatButtonVorfuehrung() => InitializeComponent();
private void Setze(int neu)
{
_wert = Math.Clamp(neu, -999, 999);
Anzeige.Text = _wert.ToString(CultureInfo.InvariantCulture);
}
private void Weniger_Click(object sender, RoutedEventArgs e) => Setze(_wert - 1);
private void Mehr_Click(object sender, RoutedEventArgs e) => Setze(_wert + 1);
private void Langsam_Click(object sender, RoutedEventArgs e) => Setze(_wert + 10);
private void Zurueck_Click(object sender, RoutedEventArgs e) => Setze(0);
}C#
RepeatButtonSeite.cs
using System.Globalization;
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Layout;
using Kuonen.UI.Text;
namespace Kuonen.UI.Galerie.Seiten;
/// <summary>Galerie-Seite: <see cref="RepeatButton"/>.</summary>
public sealed partial class RepeatButtonSeite : GalerieSeite
{
public override string Titel => "RepeatButton";
public override string Beschreibung =>
"Eine Schaltfläche, die gedrückt gehalten ihr Click-Ereignis wiederholt: zuerst nach Delay, dann alle Interval "
+ "Millisekunden. Gut für Zähler und Bildlaufpfeile.";
public override string Stichworte => "Wiederholen Wiederholtaste gedrückt halten Delay Interval Zähler";
public override string Datei => nameof(RepeatButtonSeite);
public override UIElement Baue()
{
int wert = 0;
var anzeige = new TextBlock { Text = "0", FontSize = 20, MinWidth = 48, TextAlignment = TextAusrichtung.Mitte, VerticalAlignment = VerticalAlignment.Center };
void Setze(int neu)
{
wert = Math.Clamp(neu, -999, 999);
anzeige.Text = wert.ToString(CultureInfo.InvariantCulture);
}
// Standard: 400 ms bis zur ersten Wiederholung, dann alle 50 ms.
var weniger = new RepeatButton { Content = "−", Width = 40 };
weniger.Click += (_, _) => Setze(wert - 1);
var mehr = new RepeatButton { Content = "+", Width = 40 };
mehr.Click += (_, _) => Setze(wert + 1);
var zaehler = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8 };
zaehler.Children.Add(weniger);
zaehler.Children.Add(anzeige);
zaehler.Children.Add(mehr);
// Eigene Zeiten: sofort und langsam wiederholen.
var langsam = new RepeatButton { Content = "+10 (langsam)", Delay = 0, Interval = 400 };
langsam.Click += (_, _) => Setze(wert + 10);
var zurueck = new Button { Content = "Auf 0" };
zurueck.Click += (_, _) => Setze(0);
var aus = new RepeatButton { Content = "Deaktiviert", IsEnabled = false };
var weitere = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8 };
weitere.Children.Add(langsam);
weitere.Children.Add(zurueck);
weitere.Children.Add(aus);
var seite = new StackPanel { Spacing = 12 };
seite.Children.Add(zaehler);
seite.Children.Add(weitere);
seite.Children.Add(new TextBlock { Text = "Gedrückt halten: der Wert läuft weiter, bis die Taste losgelassen wird.", TextWrapping = TextWrapping.Wrap });
return seite;
}
}