0

スクロール時に他の GridControls と同期するには、GridControl の ScrollViewer にアクセスする必要があります。

従来の DataGrid を使用する前は、VisualTreeHelper を介して ScrollViewer を取得し、ScrollChanged イベントをサブスクライブするのは非常に簡単でした。

GridControl で同じアプローチを試みましたが、うまくいきませんでした。VisualTreeHelper.GetChildrenCount()私に0をLogicalTreeHelper.GetChildren()与え、空のイテレータも与えます。

しかし..

WPF Snooper は、完全に完璧な論理ツリーとビジュアル ツリーにアクセスできます。それで、私が間違ったことをして、WPF Snooper が取得できる情報を取得できないのはなぜですか?

4

1 に答える 1

2

そうでした!あまりにも早く初期化しようとしました。

まだ初期化されているときに、コンストラクターで実行しました。

誰かがデータ グリッドを同期する方法を必要とする場合 (これがバニラのDataGridDevExpress GridControlか、それらの組み合わせかは関係ありません) 水平方向にスクロールしているときに同じデータを表示し、より多くの列がある場合は、ここに表示できます。ソリューション:

コンストラクターで:

    mainDataGrid.Loaded += (sender, args) =>
                           {
                               ScrollViewer sv = mainDataGrid.FindVisualTreeChild<ScrollViewer>();

                               if (sv != null)
                                   sv.ScrollChanged += DataGridScrollChanged;

                           };

ScrollChanged イベントのイベント ハンドラーを追加します。

private void DataGridScrollChanged(object sender, ScrollChangedEventArgs e)
{
    if (e.HorizontalChange == 0.0f)
        return;
    ScrollViewer sv = dependentDataGrid1.FindVisualTreeChild<ScrollViewer>();
    if (sv != null)
        sv.ScrollToHorizontalOffset(e.HorizontalOffset);

    sv = dependentDataGrid2.FindVisualTreeChild<ScrollViewer>();
    if (sv != null)
        sv.ScrollToHorizontalOffset(e.HorizontalOffset);
}
于 2013-01-21T20:31:12.380 に答える