Reputation: 1125
I have a UserControl which contains a ScrollViewer.
<UserControl>
<ScrollViewer Name="ScrollContainerScroller"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Hidden">
<ListBox Name="MyItemsListBox" ItemsSource="{Binding MyItems}"/>
</ScrollViewer>
</UserControl>
When consuming this UserControl inside a stackpanel the ScrollViewer's scrollbars are not shown.
<Border>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <!-- top -->
<RowDefinition Height="*"/> <!-- content -->
<RowDefinition Height="Auto"/> <!-- bottom -->
</Grid.RowDefinitions>
<StackPanel Grid.Row="1" VerticalAlignment="Top">
<Grid Name="ContentButtons" Height="20">
<Button Name="MinimizeContent"/>
<Button Name="MaximizeContent"/>
</Grid>
<ContentControl Name="MyContent"/>
</StackPanel>
<!--
<ContentControl Name="MyContent" Grid.Row="1" VerticalAlignment="Top"/>
-->
<Grid Name="MyBottomControls" Grid.Row="2" VerticalAlignment="Bottom">
<Button Name="Delete" HorizontalAlignment="Left" Style="{StaticResource DeleteButtonStyle}"/>
<Button Name="Close" HorizontalAlignment="Center" Style="{StaticResource CloseButtonStyle}"/>
<Button Name="Hide" HorizontalAlignment="Right" Style="{StaticResource HideButtonStyle}"/>
</Grid>
<!-- shows up at last so the Grid can place it at the very top it in the Z axis -->
<ContentControl Name="MyTop" Grid.Row="0" VerticalAlignment="Top"/>
</Grid>
</Border>
When I remove the wrapping stackpanel the scrollviewer is shown correctly.
What do I have to do for making the scrollbars also work with the additional stackpanel which wraps the MyContent-contentcontrol?
Upvotes: 0
Views: 472
Reputation: 4895
StackPanel resize does not calculate maximum height or widht which could invoke scrollbars to appear. You should use Grid instead and align items in it.
<Border>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/> <!-- top -->
<RowDefinition Height="*"/> <!-- content -->
<RowDefinition Height="Auto"/> <!-- bottom -->
</Grid.RowDefinitions>
<Grid Grid.Row="1" VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Name="ContentButtons" Height="20">
<Button Name="MinimizeContent"/>
<Button Name="MaximizeContent"/>
</Grid>
<ContentControl Grid.Row="1" Name="MyContent"/>
</Grid >
<!--
<ContentControl Name="MyContent" Grid.Row="1" VerticalAlignment="Top"/>
-->
<Grid Name="MyBottomControls" Grid.Row="2" VerticalAlignment="Bottom">
<Button Name="Delete" HorizontalAlignment="Left" Style="{StaticResource DeleteButtonStyle}"/>
<Button Name="Close" HorizontalAlignment="Center" Style="{StaticResource CloseButtonStyle}"/>
<Button Name="Hide" HorizontalAlignment="Right" Style="{StaticResource HideButtonStyle}"/>
</Grid>
<!-- shows up at last so the Grid can place it at the very top it in the Z axis -->
<ContentControl Name="MyTop" Grid.Row="0" VerticalAlignment="Top"/>
</Grid>
</Border>
Upvotes: 3