Pimpy Ответов: 1

Как сфокусировать элемент в списке из модели представления


Я делаю автозаполнение и хочу пройти по клавишам вверх и вниз в списке с результатами. Поэтому мне нужно изменить фокус с текстового поля на первый элемент списка.
Для изменения фокуса на listbox я использовал focusmanager. Но focusmanager фокусирует список, а не первый элемент. Мне приходится дважды нажать кнопку вниз, чтобы начать ходить по списку. Изменение свойства SelectedClient в listbox не помогает.

Что я уже пробовал:

<TextBox Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Name="Client" Text="{Binding Client}" cal:Message.Attach="[Event KeyUp] = [Action ExecuteFilterView($executionContext)]" Validation.ErrorTemplate="{x:Null}" >
                    <TextBox.Style>
                        <Style>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding UserCanChooseClient}" Value="True">
                                    <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=Clients}"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBox.Style>
                </TextBox>
<ListBox x:Name="Clients" Width="190" Height="auto" MaxHeight="400" Margin="5 28 0 0" cal:Message.Attach="[Event KeyUp] = [Action ExecuteClientsView($executionContext)]; [Event MouseLeftButtonUp]=[Action HandleClientChosenClick($eventArgs)]" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" SelectedItem="{Binding Path=SelectedClient}" ItemsSource="{Binding Path=Clients}" DisplayMemberPath="Description" SelectedValuePath="Code"></ListBox>

1 Ответов

Рейтинг:
1

#realJSOP

Вы не "фокусируетесь" ListBox предметы, вы их "отбираете".

То, что вам, вероятно, нужно сделать, это обработать событие, сфокусированное на клавиатуре, для ListBox, и внутри этого обработчика установите SelectedIndex до 0.