I've started playing with Prism again, and in the application I'm writing I needed a three-pane layout with splitters (ignore the ugly colors):
Now, I've done this before, but I couldn't find that code anywhere, so I started writing it from scratch. Apparently, there are several ways to do this, but the way I chose to do it works like this:
There are two splitters:
There are three panels:
The hardest part was to get the "MinWidth/MinHeight" to work (if I hard-code the width of one of the columns, then the MinWidth of the other column is ignored), I ended up settings the width and heights of the columns/rows using "*".
And here is the XAML code:
<Window x:Class="WpfSandbox.ThreePaneLayoutWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Three Pane Layout Window" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" MinWidth="100" />
<ColumnDefinition Width="4" />
<!-- the splitter's column -->
<!-- the "3*" will make the 3rd column 3 times as wide as the first one -->
<ColumnDefinition Width="3*" MinWidth="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" MinHeight="100" />
<RowDefinition Height="4" />
<!-- the splitter's row -->
<RowDefinition Height="*" MinHeight="100" />
</Grid.RowDefinitions>
<!-- sidebar (column #0, spanning 3 rows) -->
<TextBlock Name="SidebarRegion"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
TextAlignment="Center"
Background="Blue"
Grid.Column="0" Grid.RowSpan="3">
Sidebar region<LineBreak />
Column #0<LineBreak />
Spaning 3 rows
</TextBlock>
<!-- vertical splitter (column #1, spanning 3 rows) -->
<GridSplitter ResizeDirection="Columns"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="Black"
Grid.Column="1" Grid.RowSpan="3"/>
<!-- top area (column #2, row #0) -->
<TextBlock Name="TopRegion"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
TextAlignment="Center"
Background="Yellow"
Grid.Column="2" Grid.Row="0">
Top region<LineBreak />
Column #2<LineBreak />
Row #0
</TextBlock>
<!-- horizontal splitter (column #2, row #1) -->
<GridSplitter ResizeDirection="Rows"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="Green"
Grid.Column="2" Grid.Row="1" />
<!-- bottom area (column #2, row #2) -->
<TextBlock Name="BottomRegion"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
TextAlignment="Center"
Background="Salmon"
Grid.Column="2" Grid.Row="2">
Bottom region<LineBreak />
Column #2<LineBreak />
Row #2
</TextBlock>
</Grid>
</Window>