簡體   English   中英

設置何時在WPF ScrollViewer中滾動

[英]Setting when to scroll in WPF ScrollViewer

我有一個scrollviewer,其中包含一個網格,其中包含一堆表單控件(文本框,復選框,組合框等)。 當我瀏覽控件時,滾動查看器將滾動,但僅在必要時滾動。 我的意思是我選中滾動查看器中的所有內容,並且只有當控件不可見時,滾動查看器才會滾動。 我想要實現的是當控件位於可見區域的底部25%時滾動查看器向下滾動,然后當控件位於可見區域的前25%(反向標簽)時向上滾動。 這可以實現嗎?

我發現這個問題的最佳解決方案是處理表單控件的GotFocus事件。 由於我在公共區域生成控件,因此很容易將其分配給創建的所有控件。 在此事件處理程序中,我在其包含的網格中找到元素的位置。 然后我在滾動查看器上執行ScrollToVerticalOffset,計算滾動查看器渲染高度的一半減法。 如果可能,這會將活動控件保持在滾動查看器的中間。

void FormElement_GotFocus(object sender, RoutedEventArgs e)
{
    FormElement element = sender as FormElement;
    Point elementLocation = element.TranslatePoint(new Point(), canvasGrid);
    double finalHeight = elementLocation.Y - (canvasScrollViewer.RenderSize.Height/2);
    canvasScrollViewer.ScrollToVerticalOffset(finalHeight);
}

我認為你應該編寫一個實現IScrollInfo接口的自定義控件,並自定義接口提供的值的計算。

看看這個: http//msdn.microsoft.com/en-us/library/system.windows.controls.primitives.iscrollinfo.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM