【问题标题】:Smooth scroll within stackpanel in wpfwpf中stackpanel内的平滑滚动
【发布时间】:2011-12-13 12:45:33
【问题描述】:
<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True">
                <StackPanel Name="basePanel" Orientation="Vertical" Height="450" />
            </ScrollViewer>

这是堆栈面板的代码,它在运行时填充了多个 WrapPanel。滚动查看器滚动浏览面板 - 一次一个 - 这使得它非常不方便,因为所有面板的大小都不同。我通过在 StackPanel 中设置 ScrollViewer.CanContentScroll="False" 属性同时在 ScrollViewer 中删除它来尝试这个 one,但没有帮助 - 滚动条完全消失了。平滑滚动条的解决方法是什么?

【问题讨论】:

  • 我不确定,但也许您 Stackpanel 或其他一些容器使用虚拟化。 WPF 有时喜欢将默认的“IsVirtualizing=true”属性应用于其许多容器。

标签: wpf scroll stackpanel


【解决方案1】:

将您的StackPanel 包装在另一个面板中

WPF 的 ScrollViewer 尝试一次将整个元素滚动到视图中,这就是您看到跳跃滚动行为的原因。通过将 StackPanel 嵌套在另一个 Panel 中,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>

【讨论】:

  • 我用 DockPanel 包裹了 StackPanel,但滚动条完全消失了。
  • @Sergey 你在StackPanel 上设置了Height,因此它限制了 StackPanel 的大小。将 Height 属性移动到您的 ScrollViewer ,它应该可以工作。
  • 如此有趣和完美的解决方案;)
猜你喜欢
  • 2011-01-19
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多