Як додати ScrollBar до Stackpanel


106

У своїй програмі WPF у мене є Stackpanel, що містить декілька елементів управління всередині них. Як додати панель прокрутки до цієї стекпанелі.

Відповіді:


162

Покладіть його в ScrollViewer.


Дякую. Після розміщення навколо нього ScrollViewer весь вміст не відображається. Я спробував встановити висоту та ширину на Авто, але не пощастило. Чому слід показувати лише обмежену порцію?
Шамім Хафіз

5
Я поняття не маю. Ваше запитання було двома реченнями, це трохи детально, щоб передбачити можливі проблеми.
Joey

Зрозумів, я розміщував вступний тег у неправильному місці. Велике спасибі за допомогу.
Шамім Хафіз

Проста і досконала відповідь.
Девід Піао

94

Stackpanel не має вбудованого механізму прокрутки, але ви завжди можете загортати StackPanel у ScrollViewer

<ScrollViewer VerticalScrollBarVisibility="Auto">
  <StackPanel ... />
</ScrollViewer>

3
Що ж, StackPanelреалізує IScrollInfoта пропонує ряд методів, що стосуються прокрутки. Ви впевнені, що він не має жодного "вбудованого" механізму прокрутки?
АБО Mapper

4
від msdn.microsoft.com/en-us/library/… ... "Ця властивість не призначена для використання у вашому коді. Вона відкрита для виконання договору про інтерфейс (IScrollInfo). Налаштування цього властивості не впливає. Якщо вам потрібна фізична прокрутка замість логічної прокрутки, загорнуйте StackPanel в ScrollViewer і встановіть його властивість CanContentScroll у значення false. "
Скіннер

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
Цей код виведений із контексту. Чи можете ви видалити залежності, тому код можна використовувати без додаткових змін?
Маркус Джардеро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.