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.


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