Примечание: это больше не проблема, встроенная DataGrid .NET 4 решает эту проблему
У меня есть приложение WPF, которое использует DataGrid; Я использую API автоматизации WPF для написания некоторых автоматических тестов.
DataGrid является WPFToolkit, я использую .NET 3.5SP1 с VS2008, и в сетке данных включена функция множественного выбора.
Я нахожусь в том, что из моего теста можно найти сетку данных, и я могу найти отдельные ячейки в сетке, используя метод 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()
на itemPattern
или соответствующем RemoveFromSelection
, но когда я делаю любой из них, возникает следующее исключение:
=> Cannot change cell selection when the SelectionUnit is FullRow.
at MS.Internal.Automation.ElementUtil.Invoke(AutomationPeer peer, DispatcherOperationCallback work, Object arg)
at MS.Internal.Automation.SelectionItemProviderWrapper.AddToSelection()
Основная корневая проблема заключается в том, что (насколько я вижу) в API автоматизации пользовательского интерфейса WPF отсутствует концепция строки сетки, только ячейки. Это кажется несколько проблематичным - это правильно?
Sidenote: Ранее я использовал платформу автоматизации пользовательского интерфейса White - она не использует автоматизацию пользовательского интерфейса для выбора строк сетки, вместо этого она перемещает мышь в местоположение строки и щелкает по ней - что вызвало случайные сбои наших тестов - вот почему они используют мышь, чтобы сделать выбор?