Du kannst beliebige Controls benutzen bzw. diese verschachteln. Die
Statusbar war nur ein Beispiel ("StatusBarItem" fehlt auch noch, aber
das ändert hier nichts an deinem Problem). Wenn Du mit "frei platzieren"
meinst, dass Du feste Koordinaten für die enthaltenen Controls (im
Beispiel die vier Textblöcke) verwenden willst, kannst Du ein zweites
Canvas-Element als untere Leiste einsetzen. Allerdings ist das für
diesen Zweck eher unüblich, da sich das Layout ja meist an verschiedene
Auflösungen bzw. Fenstergrößen anpassen soll.
"Naja, oder zumindest Bla2 unter Bla1, und rechts daneben: Bla4 unter
Bla3"
Dafür würde sich ein Grid oder UniformGrid anbieten. Beispiel:
1 | <Window x:Class="bottombar.MainWindow"
|
2 | xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
3 | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
4 | Title="MainWindow" Height="350" Width="525">
|
5 |
|
6 | <Window.Resources>
|
7 | <Style x:Key="BottomGridTB" TargetType="TextBlock">
|
8 | <Setter Property="VerticalAlignment" Value="Center" />
|
9 | <Setter Property="Margin" Value="5" />
|
10 | </Style>
|
11 |
|
12 | <RoutedUICommand x:Key="ToggleBottomBar" Text="Toggle bottom bar" />
|
13 | </Window.Resources>
|
14 |
|
15 | <Window.CommandBindings>
|
16 | <CommandBinding Command="{StaticResource ToggleBottomBar}" Executed="OnExecutedToggleBottomBar" />
|
17 | </Window.CommandBindings>
|
18 |
|
19 | <Window.InputBindings>
|
20 | <KeyBinding Command="{StaticResource ToggleBottomBar}" Gesture="CTRL+B" CommandParameter="{Binding ElementName=bottomBar}" />
|
21 | </Window.InputBindings>
|
22 |
|
23 | <DockPanel LastChildFill="True">
|
24 | <Grid x:Name="bottomBar" Background="{x:Static SystemColors.ControlLightBrush}" DockPanel.Dock="Bottom">
|
25 | <Grid.RowDefinitions>
|
26 | <RowDefinition />
|
27 | <RowDefinition Height="1" />
|
28 | <RowDefinition />
|
29 | </Grid.RowDefinitions>
|
30 | <Grid.ColumnDefinitions>
|
31 | <ColumnDefinition Width="4*" />
|
32 | <ColumnDefinition Width="4*"/>
|
33 | <ColumnDefinition Width="1*"/>
|
34 | </Grid.ColumnDefinitions>
|
35 | <TextBlock Style="{StaticResource BottomGridTB}">Bla1</TextBlock>
|
36 | <TextBlock Style="{StaticResource BottomGridTB}" Grid.Row="2">Bla2</TextBlock>
|
37 | <TextBlock Style="{StaticResource BottomGridTB}" Grid.Column="1">Bla3</TextBlock>
|
38 | <TextBlock Style="{StaticResource BottomGridTB}" Grid.Row="2" Grid.Column="1">Bla4</TextBlock>
|
39 | <Border Grid.Row="1" Grid.ColumnSpan="3" Background="AliceBlue" />
|
40 | </Grid>
|
41 | <Canvas />
|
42 | </DockPanel>
|
43 | </Window>
|
1 | public void OnExecutedToggleBottomBar(object sender, ExecutedRoutedEventArgs e)
|
2 | {
|
3 | var element = (UIElement)e.Parameter;
|
4 | if(element != null)
|
5 | {
|
6 | if(element.Visibility == Visibility.Collapsed) element.Visibility = Visibility.Visible;
|
7 | else element.Visibility = Visibility.Collapsed;
|
8 | }
|
9 | }
|
3 Spalten, damit das Ganze etwas nach links orientiert ist. Strg + B
sollte die Leiste (also das Grid-Element) sichtbar/unsichtbar machen.
Ein paar Styles, damit sich einiges zentral anpassen lässt. Du kannst
natürlich andere Controls statt der Textboxen verwenden, mehr Spalten
einfügen, Grids oder andere Panels in Zellen setzen, das Ganze komplett
anders stylen etc. WPF ist da sehr flexibel.
// Edit: Methode für die Linie geändert.