Плавная прокрутка внутри стековой панели в wpf - PullRequest
6 голосов
/ 13 декабря 2011
<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True">
                <StackPanel Name="basePanel" Orientation="Vertical" Height="450" />
            </ScrollViewer>

Это код для стековой панели, которая заполняется во время выполнения несколькими WrapPanels. Scroll Viewer прокручивает панели - по одной за раз - что делает его действительно неудобным, потому что все панели имеют разные размеры. Я попробовал это one , установив свойство ScrollViewer.CanContentScroll = "False" в StackPanel при удалении его в ScrollViewer, не помогло - полоса прокрутки вообще исчезла. Какое решение для гладкой полосы прокрутки?

1 Ответ

14 голосов
/ 13 декабря 2011

Оберните StackPanel в другую панель

WPF ScrollViewer пытается прокрутить все элементы за раз, поэтому вы видите поведение прокрутки с перескоком. Вложив StackPanel в другую панель, ScrollViewer попытается прокрутить весь StackPanel в представление, которое слишком велико, поэтому будет использоваться плавная прокрутка.

Вот пример - удаление DockPanel даст вам скачкообразную прокрутку, но с ней вы получите плавную прокрутку

<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True" Height="250">
    <DockPanel>
        <StackPanel Name="basePanel" Orientation="Vertical" Width="200">
            <Rectangle Height="75" Fill="Red" Width="200" />
            <Rectangle Height="50" Fill="Orange" Width="200" />
            <Rectangle Height="75" Fill="Yellow" Width="200" />
            <Rectangle Height="75" Fill="Green" Width="200" />
            <Rectangle Height="75" Fill="Black" Width="200"  />
            <Rectangle Height="75" Fill="Purple" Width="200" />
        </StackPanel>
    </DockPanel>
</ScrollViewer>
...