NumericUpDown
Ein Zahlenfeld mit Pfeilen: tippen (gilt mit Eingabe oder beim Verlassen), Pfeiltasten und Rad gehen um SmallChange, gedrückte Pfeile wiederholen. Der Wert bleibt zwischen Minimum und Maximum; Unlesbares wird durch den bisherigen Wert ersetzt.


KXAML
NumericUpDownSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
xmlns:x="https://ui.kuonen.org/kxaml/x"
x:Class="Kuonen.UI.Galerie.Seiten.NumericUpDownVorfuehrung"
Spacing="8">
<TextBlock Text="Ganze Zahlen 0 bis 10" FontWeight="SemiBold" />
<NumericUpDown Maximum="10" Value="3" Width="160" HorizontalAlignment="Left" ValueChanged="Anzahl_ValueChanged" />
<TextBlock x:Name="AnzahlWert" Text="Anzahl: 3" />
<TextBlock Text="Zwei Nachkommastellen, Schritt 0.25, −5 bis 5" FontWeight="SemiBold" />
<!-- Zwei Nachkommastellen in Viertelschritten, auch negativ; die Grenzen vor dem Wert. -->
<NumericUpDown Minimum="-5" Maximum="5" SmallChange="0.25" Nachkommastellen="2" Value="1.5" Width="160" HorizontalAlignment="Left"
ValueChanged="Betrag_ValueChanged" />
<TextBlock x:Name="BetragWert" Text="Betrag: 1.5" />
<NumericUpDown Value="7" IsEnabled="False" Width="160" HorizontalAlignment="Left" />
</StackPanel>NumericUpDownSeite.kxaml.cs
using System.Globalization;
using Kuonen.UI;
using Kuonen.UI.Controls;
namespace Kuonen.UI.Galerie.Seiten;
public sealed partial class NumericUpDownSeite
{
protected override Func<UIElement>? KxamlFabrik => () => new NumericUpDownVorfuehrung();
}
/// <summary>KXAML-Fassung der NumericUpDown-Seite: der Baum steht in NumericUpDownSeite.kxaml, hier nur das Verhalten.</summary>
public sealed partial class NumericUpDownVorfuehrung
{
public NumericUpDownVorfuehrung() => InitializeComponent();
private static string Zahl(double w) => w.ToString("0.##", CultureInfo.InvariantCulture);
private void Anzahl_ValueChanged(object? sender, WertGeaendertArgs e) => AnzahlWert.Text = "Anzahl: " + Zahl(e.Neu);
private void Betrag_ValueChanged(object? sender, WertGeaendertArgs e) => BetragWert.Text = "Betrag: " + Zahl(e.Neu);
}C#
NumericUpDownSeite.cs
using System.Globalization;
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Layout;
namespace Kuonen.UI.Galerie.Seiten;
/// <summary>Galerie-Seite: <see cref="NumericUpDown"/>.</summary>
public sealed partial class NumericUpDownSeite : GalerieSeite
{
public override string Titel => "NumericUpDown";
public override string Beschreibung =>
"Ein Zahlenfeld mit Pfeilen: tippen (gilt mit Eingabe oder beim Verlassen), Pfeiltasten und Rad gehen um "
+ "SmallChange, gedrückte Pfeile wiederholen. Der Wert bleibt zwischen Minimum und Maximum; Unlesbares wird "
+ "durch den bisherigen Wert ersetzt.";
public override string Stichworte => "Zahlenfeld Zahl Drehfeld Spinner Pfeile Nachkommastellen Minimum Maximum SmallChange";
public override string Datei => nameof(NumericUpDownSeite);
public override UIElement Baue()
{
static string Zahl(double w) => w.ToString("0.##", CultureInfo.InvariantCulture);
// Ganze Zahlen von 0 bis 10.
var anzahl = new NumericUpDown { Maximum = 10, Value = 3, Width = 160, HorizontalAlignment = HorizontalAlignment.Left };
var anzahlWert = new TextBlock { Text = "Anzahl: 3" };
anzahl.ValueChanged += (_, e) => anzahlWert.Text = "Anzahl: " + Zahl(e.Neu);
// Zwei Nachkommastellen in Viertelschritten, auch negativ.
var betrag = new NumericUpDown { Minimum = -5, Maximum = 5, SmallChange = 0.25, Nachkommastellen = 2, Value = 1.5, Width = 160, HorizontalAlignment = HorizontalAlignment.Left };
var betragWert = new TextBlock { Text = "Betrag: 1.5" };
betrag.ValueChanged += (_, e) => betragWert.Text = "Betrag: " + Zahl(e.Neu);
var seite = new StackPanel { Spacing = 8 };
seite.Children.Add(new TextBlock { Text = "Ganze Zahlen 0 bis 10", FontWeight = 600 });
seite.Children.Add(anzahl);
seite.Children.Add(anzahlWert);
seite.Children.Add(new TextBlock { Text = "Zwei Nachkommastellen, Schritt 0.25, −5 bis 5", FontWeight = 600 });
seite.Children.Add(betrag);
seite.Children.Add(betragWert);
seite.Children.Add(new NumericUpDown { Value = 7, IsEnabled = false, Width = 160, HorizontalAlignment = HorizontalAlignment.Left });
return seite;
}
}