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

У меня есть пользовательский элемент управления, производный от 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)?

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

Вопрос:

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


person apandit    schedule 26.01.2010    source источник


Ответы (1)


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

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

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

Дополнительные сведения см. на странице обзора Focus в MSDN.

person apandit    schedule 28.01.2010