【问题标题】:Scroll position within a ScrollViewer?在 ScrollViewer 中滚动位置?
【发布时间】:2018-10-29 07:49:43
【问题描述】:

我有一个包含多个 TabItems 的 TabControl 表单。每个 TabItem 都包含一个 ScrollViewer,其中包含一些不同的包含内容。

我的问题 - 如果表单和 TabControl 以及包含的内容的大小使得 ScrollViewer 显示其垂直滚动条,则内容将在 ScrollViewer 中垂直居中显示。为了看到内容的顶部,用户需要手动滚动到顶部。

奇怪的是,当显示水平滚动条的大小时,内容最初是左对齐的,这正是我想要的。

如何使这些 ScrollViewer 打开时滚动位置初始化为顶部?

<ParentUserControl>
    <Grid>
        <TabControl>
            <TabItem>
                <ScrollViewer>
                    <Grid>
                        // Assorted Junk
                    </Grid>
                </ScrollViewer>
            </TabItem>
            <TabItem>
                <ScrollViewer>
                    <ChildUserControl />
                </ScrollViewer>
            </TabItem>
            <TabItem>
                <ScrollViewer>
                    <OtherChildUserControl />
                </ScrollViewer>
            </TabItem>
        </TabControl>
    </Grid>
</ParentUserControl>

【问题讨论】:

  • 发布您当前的 XAML。
  • 我希望您不介意我在您的标题中将TabItem 更改为ScrollViewer,以便更准确地反映您的问题。

标签: wpf xaml


【解决方案1】:

我认为正在发生的事情是 ScrollIntoView 事件被触发。这个解决方案过去对我有用:Stop WPF ScrollViewer automatically scrolling to perceived content

【讨论】:

  • 我为每个 ScrollViewer 添加了 RequestBringIntoView 处理程序,并在其中设置了 e.Handled = true。事件正在触发,处理程序正在执行,但行为没有改变。
  • 您可能需要将 RequestBringIntoReview 处理程序添加到正在显示的控件中。尝试将它放在 ChildUserControl、OtherChildUserControl、TabItem 或 TabControl 上。对我来说,我正在更改导致滚动查看器自动滚动的 StackPanel 的可见性
  • 将 RequestBringIntoView 处理程序放在 ScrollViewers 的内容上,而不是放在 ScrollViewers 上,解决了这个问题。谢谢。
猜你喜欢
  • 2012-12-07
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
相关资源
最近更新 更多