2016-05-06 23 views
0

は、すべての最初の、私は私の要件があるかを説明してみましょう、ここでは50個のフィールドを持つフォームがあります、開始時に、カーソルが最初のフィールドのテキストボックスである:WPF - スクロールする必要があるときにスクロールビューアを自動スクロールする方法はありますか

enter image description here

私は10個のフィールドを埋めたとき、カーソルが今Field11になります。

enter image description here

さて、私はより多くのビューのField11に焦点を当てたときに、スクロールは、このような場所に自動スクロールしますしたい:

enter image description here

誰かが私が話していることを理解すれば、これを解決するのを助けてくださいますか?ありがとう!

+0

ない、まさにそれを行う方法を確認してください。しかし、なぜプログラムは 'field'11'に達したときに自動スクロールしますが、' field002'に達したときには自動スクロールしませんか?一番下にあるかどうかを検出する必要がありますか? – Ian

+0

@Ianはい画面の下のフィールドを埋めるときにクライアントがより多くのフィールドを表示したいので、下にあるかどうかを検出する必要があります。 –

答えて

1

ScrollChangedEventArgs.ExtentHeightChangeを使用して、ScrollChangedがコンテンツの変更またはユーザーの操作によるものかどうかを知ることができます。コンテンツが変更されていない場合、ScrollBarの位置は自動スクロールモードを設定または設定解除します。コンテンツが変更されたら、自動スクロールを適用できます。背後

コード:

private Boolean AutoScroll = true; 

private void ScrollViewer_ScrollChanged(Object sender, ScrollChangedEventArgs e) 
{ 
    // User scroll event : set or unset autoscroll mode 
    if (e.ExtentHeightChange == 0) 
    { // Content unchanged : user scroll event 
     if (ScrollViewer.VerticalOffset == ScrollViewer.ScrollableHeight) 
     { // Scroll bar is in bottom 
      // Set autoscroll mode 
      AutoScroll = true; 
     } 
     else 
     { // Scroll bar isn't in bottom 
      // Unset autoscroll mode 
      AutoScroll = false; 
     } 
    } 

    // Content scroll event : autoscroll eventually 
    if (AutoScroll && e.ExtentHeightChange != 0) 
    { // Content changed and autoscroll mode set 
     // Autoscroll 
     ScrollViewer.ScrollToVerticalOffset(ScrollViewer.ExtentHeight); 
    } 
} 
関連する問題