In my window, there is a Grid that takes up 100% of the available vertical space. Inside that Grid is a StackPanel with another StackPanel and a Frame inside. I would like to have that Frame stick to the bottom of the parent StackPanel.
<StackPanel>
<StackPanel>
//normal content
</StackPanel>
<Frame /> // should stick to the bottom
</StackPanel>
So that, for example, when the user resizes the Window and the Grid gains height, the Frame inside sticks to the bottom.
I have tried various things, using VerticalAlign="Stretch"
or a DockPanel and assigning the Frame a DockPanel.Dock="Bottom"
, but to no success. I'd be thankful for a hint or two. I don't need the StackPanel to be a StackPanel, it can also be a DockPanel.
For example, the order of child elements can affect their size in a DockPanel but not in a StackPanel. This is because StackPanel measures in the direction of stacking at PositiveInfinity, whereas DockPanel measures only the available size. The following example demonstrates this key difference.
Put ScrollViewer inside StackPanel . You could use a ListBox instead. It will scroll automatically.
StackPanel is a layout panel that arranges child elements into a single line that can be oriented horizontally or vertically. By default, StackPanel stacks items vertically from top to bottom in the order they are declared. You can set the Orientation property to Horizontal to stack items from left to right.
A StackPanel
is not the correct Panel
to use for your requirements as they do not provide the same layout and resizing capabilities as a Grid
. Therefore, simply replace it with a Grid
, give the majority of the space to the inner StackPanel
and then the Frame
will stick to the bottom.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel>
//normal content
</StackPanel>
<Frame Grid.Row="1" />
</Grid>
You can find out more about the different WPF Panel
s in the Panels Overview page on MSDN.
Looks more like a use case for DockPanel
<DockPanel>
<StackPanel>
<!--//normal content-->
</StackPanel>
<Frame DockPanel.Dock="Bottom"/> <!--// should stick to the bottom-->
</DockPanel>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With