一度に5つのアイテムを水平に表示するリストボックスがあります。クリックすると、前の 5 セットまたは次の 5 セットが表示される「前へ」および「次へ」ボタンを実装したいと考えています。ユーザーに水平スクロールバーを表示させたくないので、水平スクロールバーを表示していません。
これを実行できる機能が既に実装されていますか、またはボタンのクリックイベントで表示しているアイテムなどを計算するコードを記述する必要がありますか?
前もって感謝します!
一度に5つのアイテムを水平に表示するリストボックスがあります。クリックすると、前の 5 セットまたは次の 5 セットが表示される「前へ」および「次へ」ボタンを実装したいと考えています。ユーザーに水平スクロールバーを表示させたくないので、水平スクロールバーを表示していません。
これを実行できる機能が既に実装されていますか、またはボタンのクリックイベントで表示しているアイテムなどを計算するコードを記述する必要がありますか?
前もって感謝します!
次のように、組み込みの ScrollViewer.PageUp() および ScrollViewer.PageDown() コマンドを使用できます。
public void ShowNextPage()
{
InvokeOnScrollViewer(listBox, viewer => viewer.PageDown());
}
public void ShowPriorPage()
{
InvokeOnScrollViewer(listBox, viewer => viewer.PageUp());
}
public void InvokeOnScrollViewer(ItemsControl control, Action<ScrollViewer> action)
{
for(Visual vis = control as Visual; VisualTreeHelper.GetChildCount(vis)!=0; vis = VisualTreeHelper.GetChild(vis, 0))
if(vis is ScrollViewer)
{
Action((ScrollViewer)vis);
break;
}
}
仕組み: InvokeOnScrollViewer は、ScrollViewer が見つかるまでビジュアル ツリーを下方向にスキャンし、それに対して指定されたアクション (PageUp() または PageDown() のいずれか) を呼び出します。
ItemsPanel が StackPanel (向き、仮想化の有無に関係なく) の場合、ScrollViewer.PageUp() は 1 ビューポート分後方に移動し、ScrollViewer.PageDown() は 1 ビューポート分前方に移動します。つまり、ListBox に 5 つの項目が表示されている場合、これらのコマンドは項目を 5 つ移動します。
ListBox.ScrollIntoView()メソッドを見てください。