SplitContainer
Der SplitContainer (WinForms) teilt seine Fläche in zwei Bereiche mit einem Teiler dazwischen. Hier wie im Explorer: der Baum links behält seine Breite (FixedPanel), wenn der Container wächst; der Inhalt rechts nimmt den Rest. Ziehen Sie den Teiler oder fokussieren Sie ihn und nutzen Sie die Pfeiltasten, wechseln Sie die Ausrichtung und klappen Sie den ersten Bereich ein. Die Mindestgrössen (je 25) hält der Teiler ein.


KXAML
SplitContainerSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
xmlns:x="https://ui.kuonen.org/kxaml/x"
x:Class="Kuonen.UI.Galerie.Seiten.SplitContainerVorfuehrung"
Spacing="8">
<TextBlock Text="Breite des Containers" FontWeight="SemiBold" />
<Slider Minimum="200" Maximum="420" Value="420" Width="240" HorizontalAlignment="Left" ValueChanged="Breite_ValueChanged" />
<!-- Wie im Explorer: der Baum links behält seine Breite (FixedPanel), der Inhalt rechts nimmt den Rest. -->
<SplitContainer x:Name="Teiler" Width="420" Height="150" HorizontalAlignment="Left" SplitterDistance="120" FixedPanel="Panel1" SplitterMoved="Teiler_SplitterMoved">
<SplitContainer.Panel1>
<Border Background="#CCE4F7">
<StackPanel Margin="8" Spacing="4">
<TextBlock Text="Dokumente" Foreground="#1B1B1B" />
<TextBlock Text="Bilder" Foreground="#1B1B1B" />
<TextBlock Text="Musik" Foreground="#1B1B1B" />
</StackPanel>
</Border>
</SplitContainer.Panel1>
<SplitContainer.Panel2>
<Border Background="#FDE7C5">
<TextBlock Text="Der Inhalt rechts füllt den Rest." Foreground="#1B1B1B" Margin="8" />
</Border>
</SplitContainer.Panel2>
</SplitContainer>
<TextBlock x:Name="Stand" Text="SplitterDistance: 120" />
<StackPanel Orientation="Horizontal" Spacing="8">
<Button Content="Orientation wechseln" Click="Ausrichtung_Click" />
<Button Content="Panel1Collapsed" Click="Einklappen_Click" />
<CheckBox x:Name="Fest" Content="IsSplitterFixed" Click="Fest_Click" />
</StackPanel>
</StackPanel>SplitContainerSeite.kxaml.cs
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Ereignisse;
using Kuonen.UI.Layout;
using Kuonen.UI.Media;
namespace Kuonen.UI.Galerie.Seiten;
public sealed partial class SplitContainerSeite
{
protected override Func<UIElement>? KxamlFabrik => () => new SplitContainerVorfuehrung();
}
/// <summary>KXAML-Fassung der SplitContainer-Seite: der Baum steht in SplitContainerSeite.kxaml, hier nur das Verhalten.</summary>
public sealed partial class SplitContainerVorfuehrung
{
public SplitContainerVorfuehrung() => InitializeComponent();
private void Breite_ValueChanged(object? sender, WertGeaendertArgs e)
{
Teiler.Width = Math.Round(e.Neu);
Stand.Text = $"Breite {Math.Round(e.Neu)}: der Baum behält seine Breite";
}
private void Teiler_SplitterMoved(object? sender, EventArgs e) => Stand.Text = $"SplitterDistance: {Math.Round(Teiler.SplitterDistance)}";
private void Ausrichtung_Click(object sender, RoutedEventArgs e) =>
Teiler.Orientation = Teiler.Orientation == Orientation.Vertical ? Orientation.Horizontal : Orientation.Vertical;
private void Einklappen_Click(object sender, RoutedEventArgs e) => Teiler.Panel1Collapsed = !Teiler.Panel1Collapsed;
private void Fest_Click(object sender, RoutedEventArgs e) => Teiler.IsSplitterFixed = Fest.IsChecked == true;
}C#
SplitContainerSeite.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="SplitContainer"/>.</summary>
public sealed partial class SplitContainerSeite : GalerieSeite
{
public override string Titel => "SplitContainer";
public override string Beschreibung =>
"Der SplitContainer (WinForms) teilt seine Fläche in zwei Bereiche mit einem Teiler dazwischen. Hier wie im Explorer: der "
+ "Baum links behält seine Breite (FixedPanel), wenn der Container wächst; der Inhalt rechts nimmt den Rest. Ziehen Sie den "
+ "Teiler oder fokussieren Sie ihn und nutzen Sie die Pfeiltasten, wechseln Sie die Ausrichtung und klappen Sie den ersten "
+ "Bereich ein. Die Mindestgrössen (je 25) hält der Teiler ein.";
public override string Stichworte => "SplitContainer Teiler Splitter SplitterDistance FixedPanel Panel1 Panel2 Orientation Panel1Collapsed IsSplitterFixed SplitterMoved Explorer";
public override string Datei => nameof(SplitContainerSeite);
private static readonly SolidColorBrush Schwarz = new(Color.FromRgb(0x1B, 0x1B, 0x1B));
public override UIElement Baue()
{
var baum = new Border
{
Background = new SolidColorBrush(Color.FromRgb(0xCC, 0xE4, 0xF7)),
Child = new StackPanel
{
Margin = new Thickness(8),
Spacing = 4,
Children =
{
new TextBlock { Text = "Dokumente", Foreground = Schwarz },
new TextBlock { Text = "Bilder", Foreground = Schwarz },
new TextBlock { Text = "Musik", Foreground = Schwarz },
},
},
};
var inhalt = new Border
{
Background = new SolidColorBrush(Color.FromRgb(0xFD, 0xE7, 0xC5)),
Child = new TextBlock { Text = "Der Inhalt rechts füllt den Rest.", Foreground = Schwarz, Margin = new Thickness(8) },
};
var teiler = new SplitContainer
{
Width = 420, Height = 150, HorizontalAlignment = HorizontalAlignment.Left,
Panel1 = baum, Panel2 = inhalt, SplitterDistance = 120, FixedPanel = FixedPanel.Panel1,
};
var stand = new TextBlock { Text = "SplitterDistance: 120" };
teiler.SplitterMoved += (_, _) => stand.Text = $"SplitterDistance: {Math.Round(teiler.SplitterDistance)}";
var breite = new Slider { Minimum = 200, Maximum = 420, Value = 420, Width = 240, HorizontalAlignment = HorizontalAlignment.Left };
breite.ValueChanged += (_, e) =>
{
teiler.Width = Math.Round(e.Neu);
stand.Text = $"Breite {Math.Round(e.Neu)}: der Baum behält seine Breite";
};
var ausrichtung = new Button { Content = "Orientation wechseln" };
ausrichtung.Click += (_, _) => teiler.Orientation = teiler.Orientation == Orientation.Vertical ? Orientation.Horizontal : Orientation.Vertical;
var einklappen = new Button { Content = "Panel1Collapsed" };
einklappen.Click += (_, _) => teiler.Panel1Collapsed = !teiler.Panel1Collapsed;
var fest = new CheckBox { Content = "IsSplitterFixed" };
fest.Click += (_, _) => teiler.IsSplitterFixed = fest.IsChecked == true;
var seite = new StackPanel { Spacing = 8 };
seite.Children.Add(new TextBlock { Text = "Breite des Containers", FontWeight = 600 });
seite.Children.Add(breite);
seite.Children.Add(teiler);
seite.Children.Add(stand);
seite.Children.Add(new StackPanel { Orientation = Orientation.Horizontal, Spacing = 8, Children = { ausrichtung, einklappen, fest } });
return seite;
}
}