Zum Inhalt
Kuonen.UI

RatingBar

Sternleisten: fünf Sterne mit halben Schritten (Überfahren zeigt eine Vorschau, Klick setzt, Klick auf den gesetzten Wert löscht), zehn Sterne, eine reine Anzeige und eine ohne Löschen. Pfeile, Pos1, Ende und Ziffern setzen den Wert.

Vorführung: RatingBarVorführung: RatingBar

KXAML

RatingBarSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
            xmlns:x="https://ui.kuonen.org/kxaml/x"
            x:Class="Kuonen.UI.Galerie.Seiten.RatingBarVorfuehrung"
            Spacing="8">
  <TextBlock Text="Halbe Sterne" FontWeight="SemiBold" />
  <RatingBar StepSize="0.5" Rating="3.5" RatingChanged="Halb_RatingChanged" />
  <TextBlock Text="Zehn Sterne" FontWeight="SemiBold" />
  <RatingBar NumStars="10" Rating="7" RatingChanged="Zehn_RatingChanged" />
  <TextBlock Text="Nur Anzeige" FontWeight="SemiBold" />
  <RatingBar StepSize="0.5" Rating="4.5" IsIndicator="True" />
  <TextBlock Text="Ohne Löschen" FontWeight="SemiBold" />
  <RatingBar Rating="2" IsClearEnabled="False" RatingChanged="Fest_RatingChanged" />
  <TextBlock x:Name="Meldung" Text="Bereit." />
</StackPanel>
RatingBarSeite.kxaml.cs
using Kuonen.UI;
using Kuonen.UI.Controls;

namespace Kuonen.UI.Galerie.Seiten;

public sealed partial class RatingBarSeite
{
    protected override Func<UIElement>? KxamlFabrik => () => new RatingBarVorfuehrung();
}

/// <summary>KXAML-Fassung der RatingBar-Seite: der Baum steht in RatingBarSeite.kxaml, hier das Verhalten.</summary>
public sealed partial class RatingBarVorfuehrung
{
    private readonly bool _bereit;

    public RatingBarVorfuehrung()
    {
        InitializeComponent();
        _bereit = true; // die Startwerte melden nicht (wie in der C#-Fassung, die erst danach abonniert)
    }

    private void Melde(string was, RatingChangedEventArgs e)
    {
        if (_bereit) Meldung.Text = RatingBarSeite.Meldung(was, e);
    }

    private void Halb_RatingChanged(object? sender, RatingChangedEventArgs e) => Melde("Halbe Sterne", e);

    private void Zehn_RatingChanged(object? sender, RatingChangedEventArgs e) => Melde("Zehn Sterne", e);

    private void Fest_RatingChanged(object? sender, RatingChangedEventArgs e) => Melde("Ohne Löschen", e);
}

C#

RatingBarSeite.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="RatingBar"/>.</summary>
public sealed partial class RatingBarSeite : GalerieSeite
{
    public override string Titel => "RatingBar";

    public override string Beschreibung =>
        "Sternleisten: fünf Sterne mit halben Schritten (Überfahren zeigt eine Vorschau, Klick setzt, Klick auf den gesetzten Wert löscht), zehn Sterne, "
        + "eine reine Anzeige und eine ohne Löschen. Pfeile, Pos1, Ende und Ziffern setzen den Wert.";

    public override string Stichworte => "Bewertung Sterne Rating Stimme Punkte RatingBar RatingControl NumStars StepSize IsIndicator IsClearEnabled";

    public override string Datei => nameof(RatingBarSeite);

    internal static string Meldung(string was, RatingChangedEventArgs e) =>
        string.Create(CultureInfo.InvariantCulture, $"{was}: {e.NewRating:0.#}");

    public override UIElement Baue()
    {
        var meldung = new TextBlock { Text = "Bereit." };
        var halb = new RatingBar { StepSize = 0.5, Rating = 3.5 };
        halb.RatingChanged += (_, e) => meldung.Text = Meldung("Halbe Sterne", e);
        var zehn = new RatingBar { NumStars = 10, Rating = 7 };
        zehn.RatingChanged += (_, e) => meldung.Text = Meldung("Zehn Sterne", e);
        var anzeige = new RatingBar { StepSize = 0.5, Rating = 4.5, IsIndicator = true };
        var fest = new RatingBar { Rating = 2, IsClearEnabled = false };
        fest.RatingChanged += (_, e) => meldung.Text = Meldung("Ohne Löschen", e);
        return new StackPanel
        {
            Spacing = 8,
            Children =
            {
                new TextBlock { Text = "Halbe Sterne", FontWeight = 600 },
                halb,
                new TextBlock { Text = "Zehn Sterne", FontWeight = 600 },
                zehn,
                new TextBlock { Text = "Nur Anzeige", FontWeight = 600 },
                anzeige,
                new TextBlock { Text = "Ohne Löschen", FontWeight = 600 },
                fest,
                meldung,
            },
        };
    }
}