Zum Inhalt
Kuonen.UI

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.

Vorführung: NumericUpDownVorführung: NumericUpDown

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