2012-03-12 33 views
7

私はコードの背後にあるWPFデータグリッドを下にスクロールしようとしています。 は、私はこれがitemNum行が現在表示されていない場合にのみ、ダウンスクロールwpf(C#)DataGrid ScrollIntoView - 表示されていない最初の行にスクロールする方法はありますか?

int itemNum=0; 
    private void Down_Click(object sender, RoutedEventArgs e) 
    { 
     if (itemNum + 1 > dataGridView.Items.Count - 1) return; 
     itemNum+=1; 
     dataGridView.UpdateLayout(); 
     dataGridView.ScrollIntoView(dataGridView.Items[itemNum]); 
    } 

を使用します。

たとえば、DataGridが10行を保持するのに十分な長さで、20行ある場合、次の行にスクロールするために、この関数を11回(itemNumが11になるまで)呼び出す必要があります。

行が既にグリッドに収まっている場合は、スクロールダウンしません(画面上の最後の行でも)。

このメソッドを呼び出すと、グリッドは次の行をグリッドの上に移動します(スクロール側と同様)。 なぜ機能していませんか?

答えて

18

DataGridView.FirstDisplayedScrollingRowIndexを使用します。

int itemNum=0; 
    private void Down_Click(object sender, RoutedEventArgs e) 
    { 
     itemNum++; 
     if (itemNum > dataGridView.Items.Count - 1) return; 
     //dataGridView.UpdateLayout(); <-- I don't think you need this 
     dataGridView.FirstDisplayedScrollingRowIndex = itemNum; 
    } 

それを持っていなかったWPFグリッドを実現しませんでした申し訳ありません。スクロールに関するポイントは有効なthoのままです。

ScrollIntoViewは、アイテムが表示されていない場合にのみスクロールし、現在の表示行の下にある場合は最後の行にします。したがって、11番目のアイテムを表示するためにスクロールすると、 。

この回避策は有効です。一番下の行までスクロールし、必要な行までスクロールします。ここで実際にレイアウトを更新する必要があることに注意してください。最初のスクロールの結果は無視され、再度スクロールアップされます。

 dataGridView.ScrollIntoView(DataGrid1.Items[DataGrid1.Items.Count - 1]); 
     dataGridView.UpdateLayout(); 
     dataGridView.ScrollIntoView(DataGrid1.Items[itemIndex]); 
+2

私は残念ですが、これはWPFのDataGridであり、一部の失礼な人が、私の話題のWPF部分を削除しただけで、ポイントを取得する可能性があります。あなたがWINDOWS FORM DataGridView – Programer

+1

で動作するよう提案しました申し訳ありません、WPF – Tsabo

+1

の回答を更新しました@Tsaboありがとう..私のために働きました..私はこれを探していました –

2

Check this out、それはリストボックスのためだが、洞察力は素晴らしいですし、それはまた、グリッドのために働く可能性があります

いくつかの単語では:あなたがのscrollIntoViewを呼び出すので、もし項目は、非同期的にリストボックスにロードされています()はCollectionChangedイベント(または同様のもの)内にアイテムがまだないので、スクロールしません。

希望すると、それは確かに私を助けました! ;-)

関連する問題