2010-09-27 4 views
1

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

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

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

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

Любой может знать, как это можно контролировать?

ответ

1

Вы ищете KeyboardNavigation.TabIndex недвижимость?

+0

Привет Джо, спасибо за ваш быстрый повторе. Это может быть возможным решением. Дело в том, что мой документ чрезвычайно сложный, пользователь может перемещать элементы вверх и вниз - мне придется управлять этими индексами. Вы знаете, как это будет вести себя в вложенных списках? Например, внешние элементы будут индексироваться из 0-N, а внутренние элементы также будут индексом от 0-M, если это так - ваше предложение будет работать для меня. – Gilad

+0

Я никогда не вставлял один список внутри другого, поэтому я не уверен. Если вы пытаетесь использовать Tab для перемещения между элементами списка в том же списке, вам может потребоваться сыграть с KeyboardNavigation.TabNavigation в ListBox. Похоже, что порядок вкладок по умолчанию идет между элементами управления в том же элементе списка, а затем в следующий элемент списка. Если вам нужно что-то другое, взгляните на другие свойства KeyboardNavigation. Если вы все еще застряли, я думаю, вам придется опубликовать более конкретный вопрос. –

3

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

<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> 
Смежные вопросы