2014-01-15 90 views
0

我有一个TabControl包含多个TabItems的表单。每个TabItem都包含一个ScrollViewer,其中包含一些包含的内容。在ScrollViewer中滚动位置?

我的问题 - 如果窗体的大小,TabControl和包含的内容是这样ScrollViewer显示其垂直滚动条,内容显示垂直居中在ScrollViewer内。为了看到内容的顶部,用户需要手动滚动到顶部。

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

如何使这些ScrollViewer以scrollposition初始化为顶部打开?

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

发布您当前的XAML。 –

+0

我希望你不要介意,我在标题中将'TabItem'改为'ScrollViewer',以便它更准确地反映你的问题。 – Sheridan

回答

0

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

+0

我为每个ScrollViewer添加了一个RequestBringIntoView处理函数,并在其中设置了e.Handled = true。事件触发,处理程序正在执行,但行为不变。 –

+0

您可能需要将RequestBringIntoReview处理程序添加到显示的控件中。尝试将它放在ChildUserControl,OtherChildUserControl,TabItem或TabControl上。对我来说,我改变了导致scrollviewer自动滚动的StackPanel的可见性 – DLeh

+1

将RequestBringIntoView处理程序放在ScrollViewers的内容上,而不是ScrollViewers上,解决了这个问题。谢谢。 –