WPF: сложное поведение фокуса вкладки - PullRequest
1 голос
/ 27 сентября 2010

Мой элемент управления построен из вложенных списков и древовидных представлений. Каждый элемент списка / дерева также содержит расширенные текстовые поля и другие элементы управления.

Я хочу определить поведение фокуса «вкладка», чтобы при нажатии пользователем «Tab» следующий фокусируемый элемент (в соответствии с определенным порядком) стал фокусированным.

В настоящее время он не работает, как я принимаю (он работает только частично).

Мой вопрос не является специфическим для моего случая - скорее, как вообще определить такое поведение. В качестве крайнего примера, скажем, я хочу полностью контролировать это и сделать фокус-переход между объектами, которые физически не находятся рядом.

Кто-нибудь может знать, как это можно контролировать?

Ответы [ 2 ]

3 голосов
/ 28 сентября 2010

Джо, этот механизм умнее, чем я думал, проверьте это вложение - оно отлично работает:

<ListBox KeyboardNavigation.TabNavigation="Continue">
    <ListBoxItem Focusable="False">
        <ListBox KeyboardNavigation.TabNavigation="Continue">
            <ListBox.Items>
                <ListBoxItem Focusable="False">
                    <TextBox Width="300" KeyboardNavigation.TabIndex="1" Focusable="True"/>
                </ListBoxItem>
                <ListBoxItem Focusable="False">
                    <TextBox Width="300" KeyboardNavigation.TabIndex="2" Focusable="True"/>
                </ListBoxItem>
                <ListBoxItem Focusable="False">
                    <TextBox Width="300" KeyboardNavigation.TabIndex="3" Focusable="True"/>
                </ListBoxItem>
            </ListBox.Items>
        </ListBox>
    </ListBoxItem>
    <ListBoxItem Focusable="False">
        <ListBox KeyboardNavigation.TabNavigation="Continue">
            <ListBox.Items>
                <ListBoxItem Focusable="False">
                    <TextBox Width="300" KeyboardNavigation.TabIndex="1" Focusable="True"/>
                </ListBoxItem>
                <ListBoxItem Focusable="False">
                    <StackPanel>
                        <TextBox Width="300" KeyboardNavigation.TabIndex="3" Focusable="True"/>
                        <Border BorderBrush="Red">
                            <ListBox KeyboardNavigation.TabNavigation="Continue">
                                <ListBoxItem Focusable="False">
                                    <ListBox KeyboardNavigation.TabNavigation="Continue">
                                        <ListBox.Items>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="1" Focusable="True"/>
                                            </ListBoxItem>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="2" Focusable="True"/>
                                            </ListBoxItem>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="3" Focusable="True"/>
                                            </ListBoxItem>
                                        </ListBox.Items>
                                    </ListBox>
                                </ListBoxItem>
                                <ListBoxItem Focusable="False">
                                    <ListBox KeyboardNavigation.TabNavigation="Continue">
                                        <ListBox.Items>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="1" Focusable="True"/>
                                            </ListBoxItem>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="2" Focusable="True"/>
                                            </ListBoxItem>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="3" Focusable="True"/>
                                            </ListBoxItem>
                                        </ListBox.Items>
                                    </ListBox>
                                </ListBoxItem>
                            </ListBox>
                        </Border>
                    </StackPanel>
                </ListBoxItem>
                <ListBoxItem Focusable="False">
                    <StackPanel>
                        <TextBox Width="300" KeyboardNavigation.TabIndex="3" Focusable="True"/>
                        <Border BorderBrush="Red">
                            <ListBox KeyboardNavigation.TabNavigation="Continue">
                                <ListBoxItem Focusable="False">
                                    <ListBox KeyboardNavigation.TabNavigation="Continue">
                                        <ListBox.Items>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="1" Focusable="True"/>
                                            </ListBoxItem>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="2" Focusable="True"/>
                                            </ListBoxItem>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="3" Focusable="True"/>
                                            </ListBoxItem>
                                        </ListBox.Items>
                                    </ListBox>
                                </ListBoxItem>
                                <ListBoxItem Focusable="False">
                                    <ListBox KeyboardNavigation.TabNavigation="Continue">
                                        <ListBox.Items>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="1" Focusable="True"/>
                                            </ListBoxItem>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="2" Focusable="True"/>
                                            </ListBoxItem>
                                            <ListBoxItem Focusable="False">
                                                <TextBox Width="300" KeyboardNavigation.TabIndex="3" Focusable="True"/>
                                            </ListBoxItem>
                                        </ListBox.Items>
                                    </ListBox>
                                </ListBoxItem>
                            </ListBox>
                        </Border>
                    </StackPanel>
                </ListBoxItem>
            </ListBox.Items>
        </ListBox>
    </ListBoxItem>
</ListBox>
1 голос
/ 27 сентября 2010

Вы ищете свойство KeyboardNavigation.TabIndex ?

...