2013-07-10 3 views
1

Я пишу программное обеспечение для автоматизации пользовательского интерфейса. Мне нужно выбрать строку в datagrid, а затем нажать кнопку запуска. Я пробовал большинство примеров кода в Интернете, и они не работали для меня. Например, для выбора GridView строки:Выберите строку datagrid с помощью автоматизации пользовательского интерфейса

Когда я пишу следующий код:

AutomationElement dataGrid = this.mainWindow.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "2885")); 

if (dataGrid != null) 
{ 
    GridPattern pattern = GetGridPattern(dataGrid); 
    AutomationElement tempElement = pattern.GetItem(1, 1); 
    tempElement.SetFocus(); 
} 

Я получаю ошибку: «Target элемент не может получить фокус.» который связан с последней строкой.

Я также попытался код:

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(); 

, но я и получили ошибку: "неподдерживаемую Pattern".

Следует упомянуть, что я использую UI Spy для извлечения свойств элементов.

Не могли бы вы объяснить мне, что случилось, и как выбрать строку? ! [UI Spy] [1]

ответ

2

Вот как вы можете это сделать:

 // get to ROW X (here it's row #1 name is always "Row X") 
     AutomationElement row1 = dataGrid.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Row 1")); 

     // get row header 
     AutomationElement row1Header = row1.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Header)); 

     // invoke it (select the whole line) 
     ((InvokePattern)row1Header.GetCurrentPattern(InvokePattern.Pattern)).Invoke(); 

Чтобы найти эти операции, вы можете использовать UISpy и попробовать различные элементы в дереве, посмотрите на рисунок каждый элемент реализует и тестирует их с помощью контекстного меню «Управление шаблонами» UISpy.

Смежные вопросы