Попробуйте сетку вокруг ScrollViwer
вместо StackPanel
. Я думаю, StackPanel
обеспечит столько высоты, сколько хочет внутреннее содержимое, поэтому здесь Scrollviwer
не работает должным образом, так как его высота не ограничена его родительским элементом управления.
Вы можете понять проблему из приведенного ниже примера.
<StackPanel>
<ScrollViewer>
<ItemsControl >
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" StrokeThickness="4" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" StrokeThickness="4" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
</ItemsControl>
</ScrollViewer>
</StackPanel>
Вышеупомянутый код похож на ваш и не дает полос прокрутки. Но посмотрите на приведенный ниже код, в котором я изменил только StackPanel
на Grid
(любая панель, которая учитывает размер своих дочерних элементов в зависимости от размера панелей, но стека нет)
<Grid>
<ScrollViewer>
<ItemsControl >
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" StrokeThickness="4" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" StrokeThickness="4" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
</ItemsControl>
</ScrollViewer>
</Grid>
ОБНОВЛЕНИЕ : Но если вам действительно нужно использовать StackPanel
, вам может потребоваться установить размер для ScrollViwer
, чтобы получить прокрутку содержимого