Zum Inhalt
Kuonen.UI

Werkzeugleiste und Statuszeile

Zwei Werkzeugleisten in einer Ablage: am Griff verschieben, ordnet sie um; was nicht passt (oder OverflowMode=Always trägt), wandert hinter „…“. Pfeiltasten wandern innerhalb der Leiste. Die Statuszeile darunter dehnt das erste Feld (Spring) und meldet, was gedrückt wurde.

Vorführung: Werkzeugleiste und StatuszeileVorführung: Werkzeugleiste und Statuszeile

KXAML

LeistenSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
            xmlns:x="https://ui.kuonen.org/kxaml/x"
            x:Class="Kuonen.UI.Galerie.Seiten.LeistenVorfuehrung"
            Spacing="8">
  <ToolBarTray>
    <ToolBar>
      <Button Content="Neu" Click="Knopf_Click" />
      <Button Content="Öffnen" Click="Knopf_Click" />
      <Button Content="Speichern" Click="Knopf_Click" />
      <Separator />
      <!-- Immer im Überlauf: erscheint erst hinter „…“. -->
      <Button Content="Drucken" ToolBar.OverflowMode="Always" Click="Knopf_Click" />
    </ToolBar>
    <ToolBar BandIndex="1">
      <ToggleButton Content="Fett" Click="Knopf_Click" />
      <ToggleButton Content="Kursiv" Click="Knopf_Click" />
    </ToolBar>
  </ToolBarTray>
  <Border Height="80" Background="#CCE4F7" />
  <StatusBar>
    <StatusBarItem Spring="True">
      <TextBlock x:Name="Meldung" Text="Bereit." />
    </StatusBarItem>
    <Separator />
    <StatusBarItem Content="Zeile 1, Spalte 1" />
  </StatusBar>
</StackPanel>
LeistenSeite.kxaml.cs
using Kuonen.UI;
using Kuonen.UI.Ereignisse;

namespace Kuonen.UI.Galerie.Seiten;

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

/// <summary>KXAML-Fassung der Seite Werkzeugleiste und Statuszeile: der Baum steht in LeistenSeite.kxaml, hier das Verhalten.</summary>
public sealed partial class LeistenVorfuehrung
{
    public LeistenVorfuehrung() => InitializeComponent();

    private void Knopf_Click(object sender, RoutedEventArgs e) => Meldung.Text = LeistenSeite.Gedrueckt(sender);
}

C#

LeistenSeite.cs
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Layout;
using Kuonen.UI.Media;

namespace Kuonen.UI.Galerie.Seiten;

/// <summary>Galerie-Seite: <see cref="ToolBarTray"/>, <see cref="ToolBar"/> und <see cref="StatusBar"/>.</summary>
public sealed partial class LeistenSeite : GalerieSeite
{
    public override string Titel => "Werkzeugleiste und Statuszeile";

    public override string Beschreibung =>
        "Zwei Werkzeugleisten in einer Ablage: am Griff verschieben, ordnet sie um; was nicht passt (oder OverflowMode=Always trägt), wandert hinter "
        + "„…“. Pfeiltasten wandern innerhalb der Leiste. Die Statuszeile darunter dehnt das erste Feld (Spring) und meldet, was gedrückt wurde.";

    public override string Stichworte =>
        "ToolBar ToolBarTray ToolStrip StatusBar StatusStrip Werkzeugleiste Statuszeile Statusleiste Überlauf OverflowMode Band BandIndex Spring Griff";

    public override string Datei => nameof(LeistenSeite);

    internal static string Gedrueckt(object? sender) => sender switch
    {
        ToggleButton { Content: string text, IsChecked: true } => $"„{text}“ eingeschaltet.",
        ToggleButton { Content: string text } => $"„{text}“ ausgeschaltet.",
        ContentControl { Content: string text } => $"„{text}“ gedrückt.",
        _ => "",
    };

    public override UIElement Baue()
    {
        var meldung = new TextBlock { Text = "Bereit." };
        var datei = new ToolBar();
        foreach (var name in new[] { "Neu", "Öffnen", "Speichern" })
        {
            var knopf = new Button { Content = name };
            knopf.Click += (s, _) => meldung.Text = Gedrueckt(s);
            datei.Items.Add(knopf);
        }
        datei.Items.Add(new Separator());
        // Immer im Überlauf: erscheint erst hinter „…“.
        var drucken = new Button { Content = "Drucken" };
        ToolBar.SetOverflowMode(drucken, OverflowMode.Always);
        drucken.Click += (s, _) => meldung.Text = Gedrueckt(s);
        datei.Items.Add(drucken);
        var format = new ToolBar { BandIndex = 1 };
        foreach (var name in new[] { "Fett", "Kursiv" })
        {
            var schalter = new ToggleButton { Content = name };
            schalter.Click += (s, _) => meldung.Text = Gedrueckt(s);
            format.Items.Add(schalter);
        }
        var ablage = new ToolBarTray();
        ablage.ToolBars.Add(datei);
        ablage.ToolBars.Add(format);

        var flaeche = new Border { Height = 80, Background = new SolidColorBrush(Color.FromRgb(0xCC, 0xE4, 0xF7)) };

        var status = new StatusBar();
        status.Items.Add(new StatusBarItem { Content = meldung, Spring = true });
        status.Items.Add(new Separator());
        status.Items.Add(new StatusBarItem { Content = "Zeile 1, Spalte 1" });

        var seite = new StackPanel { Spacing = 8 };
        seite.Children.Add(ablage);
        seite.Children.Add(flaeche);
        seite.Children.Add(status);
        return seite;
    }
}