Перехід фокусу в елемента ListBox (Silverlight)

Привіт! Одного разу, коли я мені потрібно було зробити послідовну передачу фокусу в між елементами управління, за допомогою клавіші Tab, в мене виникло одне непорозуміння у реалізації цієї поведінки в елемента управління ListBox.

В цій статті, я хочу описати короткі кроки до реалізації цієї поведінки в елемента управління ListBox в технології Silverlight.

Для прикладу, ви маєте три елементи управління, в яких перехід фокусу має відбуватись наступним чином:

clip_image001

Рис 1.1

Для цієї реалізації, можна скористатись властивістю елементів TabIndex. В даному випадку, елемент CheckBox має TabIndex = 0, наступне текстове поле має TabIndex = 1 і третій елемент ListBox має TabIndex= 3.

Здається, що цього достатньо для реалізації необхідної поведінки, але коли ListBox отримує фокус, то після наступного натискання клавіші Tab він його відразу віддає наступному елементу. Цю поведінку можна виправити за допомогою властивості TabNavigation, в яку потрібно підставити значення “Local”:

1 <ListBox Name=”listBox1″ Grid.Column=”1″ Grid.RowSpan=”2″ TabIndex=”2″ TabNavigation=”Local”>2 <ListBoxItem Content=”Item1″/>3 <ListBoxItem Content=”Item2″/>4 …. 5 <ListBoxItem Content=”Item9″/>6 </ListBox>7

Тепер, коли ListBox отримує фокус і користувач натискає клавішу Tab, він передає фокус вкладеним елементам управління послідовно.

В більшості випадків, ви будете робити такий список, де кожен елемент задається одним шаблоном, який містить елементи здатні приймати фокус. Тут може виникнути ще одна проблема, так як кожен елемент списку буде обгортатись елементом ListBoxItem. У такому випадку, для переходу до наступного елементу в списку потрібно буде натискати клавішу Tab кілька разів.

Це можна легко виправити Smile. Потрібно підставити стиль, який буде застосовуватись до кожного елементу ListBoxItem:

1 <ListBox Name=”listBox1″ Grid.Column=”1″ Grid.RowSpan=”2″ TabIndex=”2″ TabNavigation=”Local”> 2 <ListBoxItem Content=”Item1″/> 3 <ListBoxItem Content=”Item2″/> 4 <ListBox.ItemContainerStyle> 5 <Style TargetType=”ListBoxItem”> 6 <Setter Property=”IsTabStop” Value=”False”/> 7 </Style> 8 </ListBox.ItemContainerStyle> 9 </ListBox>10

З попереднього коду видно, що я підставив стиль з однією властивістю IsTabStop, в яку передав значення False. В цьому випадку кожен елемент ListBoxItem не буде ловити фокус, що дозволить його відловлювати елементам, які задані в вашому DataTemplate.

Ось таким чином можна реалізувати перехід фокусу в елемента управління ListBox.

Advertisements

, , ,

  1. Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: