[英]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.