2014年11月7日金曜日

WPF : Datagrid の一番下の行にスクロールする


このエントリーをはてなブックマークに追加
参考先にいくつかあった方法の使い分けについて。
サンプルコードは C# です。

方法1. ScrollIntoView を使う


ScrollIntoView の引数はオブジェクトなので最終行に相当するオブジェクトがわかっていればそれを使います。

myDataGrid.ScrollIntoView(itemInRow);


Items プロパティの Count と GetItem で最終行のオブジェクトを取得することができるので、以下のようなコードにすると常に動くのではないかと思います。

myDataGrid.ScrollIntoView(myDataGrid.Items.GetItemAt(myDataGrid.Items.Count - 1));


また、DataGrid の CanUserAddRows プロパティが true の場合は、DataGrid の最終行に追加用の行が挿入されているため、追加用の行を CollectionView.NewItemPlaceholder で指定することでスクロールできます。

myDataGrid.ScrollIntoView(CollectionView.NewItemPlaceholder);


方法2. Daragrid のスクロールビューを取得して操作する


少々煩雑ですが、常に使えるようです。ScrollIntoView が使えないような状況があれば、こちらの使用を検討します。

if (mainDataGrid.Items.Count > 0)
{
    var border = VisualTreeHelper.GetChild(mainDataGrid, 0) as Decorator;
    if (border != null)
    {
        var scroll = border.Child as ScrollViewer;
        if (scroll != null) scroll.ScrollToEnd();
    }
}

参考 : How to autoscroll on WPF datagrid

0 件のコメント:

コメントを投稿