Автоматизация пользовательского интерфейса в пользовательском элементе управления: необходимо использовать сочетание клавиш CTRL + TAB (вкладка фокусируется на первом объекте) - PullRequest
0 голосов
/ 27 января 2010

У меня есть пользовательский элемент управления, полученный из ListView. В этом представлении списка используется GridView с двумя столбцами (каждый из которых имеет соответствующий шаблон): один столбец является заголовком (просто метка), а другой столбец - элементом управления.

При использовании это выглядит так:


<l:CoolList>
    <TextBox l:CoolList.Caption="Name" Text={Binding Name} />
    <TextBox l:CoolList.Caption="Age" Text={Binding Age} />
    <WrapPanel>
        <Button Click="btnOkay_click" />
        <Button Click="btnCancel_click" />
    </WrapPanel>
</l:CoolList>

В конечном итоге это выглядит примерно так (все хорошо выровнено):

Name: [____________]
 Age: [____________]
      [Okay][Cancel]

Теперь, когда я хочу обойти эти текстовые поля, используя TAB, он фокусируется только на первом текстовом поле. Чтобы изменить фокус на другие текстовые поля, я должен нажать CTRL + TAB.

Я просмотрел сайт MSDN и похоже, что мне может понадобиться реализовать AutomationPeer, но это действительно сбивает с толку то, что я должен делать. Кто-нибудь, кто имеет опыт работы с этим, знает, как сделать доступными дочерние текстовые поля (используя только TAB)?

ПРИМЕЧАНИЕ. Сетка данных WPFToolKit - хороший пример того, что я ищу. Вы можете пройти через каждый элемент сетки, нажав TAB (не CTRL + TAB). Кажется, они реализуют AutomationPeers для DataGrid, каждой строки, каждого предъявителя строки, каждой ячейки и каждого предъявителя ячейки. Я ищу общее решение, с помощью которого я могу открыть дочерние элементы TAB.

Вопрос:

Как сделать элементы ListView доступными для TAB (могут быть потомками ListViewItem)?

1 Ответ

1 голос
/ 28 января 2010

Как выясняется, есть гораздо более простое решение без повторной реализации одноранговых узлов автоматизации (поскольку в моем пользовательском списке уже есть действительные одноранговые узлы для его дочерних элементов).

Все, что мне нужно было сделать, это установить в стиле моего списка:

<Setter Property="KeyboardNavigation.TabNavigation" Value="Cycle" />

Подробнее см. На странице Обзор фокуса на MSDN .

...