Как добавить ScrollBar в Stackpanel

106

В моем приложении WPF у меня есть Stackpanel, содержащий несколько элементов управления внутри. Как я могу добавить полосу прокрутки к этой панели стека.

Шамим Хафиз
источник

Ответы:

162

Поместите это в файл ScrollViewer.

Джоуи
источник
Спасибо. После размещения ScrollViewer вокруг него весь контент не отображается. Я попытался установить для высоты и ширины значение «Авто», но безуспешно. Почему должна показываться только ограниченная часть?
Шамим Хафиз
5
Я понятия не имею. Ваш вопрос состоял из двух предложений, что является небольшой подробностью, позволяющей предвидеть любые потенциальные проблемы.
Joey
Понятно, я вставлял открывающий тег не в то место. Большое спасибо за помощь.
Шамим Хафиз
Простой и точный ответ.
Дэвид Пяо,
94

Stackpanel не имеет встроенного механизма прокрутки, но вы всегда можете обернуть StackPanel в ScrollViewer

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <StackPanel ... />
</ScrollViewer>
биджу
источник
3
Что ж, StackPanelреализует IScrollInfoи предлагает ряд методов, связанных с прокруткой. Вы уверены, что в нем нет какого-то «встроенного» механизма прокрутки?
OR Mapper
4
from msdn.microsoft.com/en-us/library/… ... "Это свойство не предназначено для использования в вашем коде. Оно открыто для выполнения контракта интерфейса (IScrollInfo). Установка этого свойства не имеет никакого эффекта. Если вам требуется физическая прокрутка вместо логической, оберните StackPanel в ScrollViewer и установите для его свойства CanContentScroll значение false ».
Skinner
11

Это работает так:

<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled" Width="340" HorizontalAlignment="Left" Margin="12,0,0,0">
        <StackPanel Name="stackPanel1" Width="311">

        </StackPanel>
</ScrollViewer>

TextBox tb = new TextBox();
tb.TextChanged += new TextChangedEventHandler(TextBox_TextChanged);
stackPanel1.Children.Add(tb);
Арниш
источник
0

Для горизонтально ориентированной StackPanel явное добавление видимости обеих полос прокрутки помогло мне получить горизонтальную полосу прокрутки.

    <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto" >
        <StackPanel Orientation="Horizontal" />
    </ScrollViewer>
ВиджайКП
источник
1
Повторение предыдущих ответов.
vapcguy
-4

Если вы имеете в виду, что хотите прокрутить несколько элементов в панели стека, попробуйте обвести ее сеткой. По определению стековая панель имеет бесконечную длину.

Так что попробуйте что-нибудь вроде этого:

   <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel Width="311">
              <TextBlock Text="{Binding A}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontStretch="Condensed" FontSize="28" />
              <TextBlock Text="{Binding B}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
        </StackPanel>
    </Grid>

Вы даже можете сделать это с помощью ScrollViewer

Причудливо
источник
4
Этот код вырван из контекста. Не могли бы вы удалить зависимости, чтобы код можно было использовать без дальнейших изменений?
Маркус Джардерот