2

注:これはもはや問題ではありません。.NET4の組み込みDataGridがこの問題を解決します


DataGridを使用しているWPFアプリがあります。WPF ui Automation APIを使用して、自動テストを作成しています。DataGridはWPFToolkitのものであり、VS2008で.NET 3.5SP1を使用しており、datagridで複数選択が有効になっています。

私がいるところは、私のテストからデータグリッドを見つけることができ、GridPattern.GetItemメソッドを使用してグリッド内の個々のセルを見つけ、を設定してそれらを選択できるということですSelectionItemPattern.Select。方法

コードは次のようになります。

AutomationElement mainGrid = // find the grid in the window
var columnCount = (int)mainGrid.GetCurrentPropertyValue(GridPattern.ColumnCountProperty);
var mainGridPattern = (GridPattern)mainGrid.GetCurrentPattern(GridPattern.Pattern);

var rowToSelect = 2;

// select just the first cell
var item = mainGridPattern.GetItem(rowToSelect, 0);
var itemPattern = (SelectionItemPattern)item.GetCurrentPattern(SelectionItemPattern.Pattern);
itemPattern.Select();

これは機能しているように見えますが、テーブルの行全体(10列)ではなく、最初の個々のセルのみが選択されますが、アイテムの選択を解除する方法がわかりません。動作するように見える唯一のことは、、または対応するSelectionItemPattern.AddToSelection()を呼び出すことですが、これらのいずれかを実行すると、次の例外が発生します。itemPatternRemoveFromSelection

=> SelectionUnitがFullRowの場合、セルの選択を変更することはできません。
   MS.Internal.Automation.ElementUtil.Invoke(AutomationPeerピア、DispatcherOperationCallback作業、オブジェクト引数)で
   MS.Internal.Automation.SelectionItemProviderWrapper.AddToSelection()で

根本的な根本的な問題は、(私が見る限り)WPF UIオートメーションAPIにはグリッド行の概念がなく、セルのみであるということのようです。これはやや問題があるようです-これは正しいですか?

補足:以前はホワイトUIオートメーションフレームワークを使用していました-これはグリッド行を選択するためにUIオートメーションを使用せず、代わりにマウスを行の場所に移動してクリックします-これがテストのランダムな失敗を引き起こしました-これが彼らが理由ですしかし、マウスを使用して選択を行っていますか?

4

2 に答える 2

0

UISpyを使用してUIAutomationが表示するDataGridの構造を確認すると、DataGrid要素にRowsPresenterが含まれ、RowsPresenterに多数のDataGridRowsが含まれ、それぞれにDataGridCellが含まれていることがわかります。

何が起こっているのかというvar item = mainGridPattern.GetItem(rowToSelect, 0);と、セルを表すアイテムが返されているのに対し、行全体を表すアイテムが必要なのではないかと思います。

あなたはこれを呼び出すことによってこれを得ることができますitem.CachedParent-それからSelect()それ。

于 2010-03-12T13:07:39.317 に答える
0

これは.NET4で修正されたようです。行は、をサポートする実際のオブジェクトとして公開されるSelectionItemPatternようになったため、行を選択/選択解除できるようになりました。Hooray

于 2010-07-11T20:52:07.823 に答える