2014-01-15 89 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上,解決了這個問題。謝謝。 –