Я пытаюсь программно установить фокус клавиатуры на элемент дерева (при определенных условиях).Я попробовал 2 способа установки фокуса, оба из которых успешно получают фокус на TreeViewItem
, но теряют фокус клавиатуры.
Древовидное представление привязано к модели представления:
<TreeView Name="solutionsModel" TreeViewItem.Selected="solutionsModel_Selected"
ItemsSource="{Binding Items, Mode=OneWay}" />
Я пытаюсь установить фокус с помощью перенаправленного события TreeViewItem
Selected
:
private void solutionsModel_Selected(object sender, RoutedEventArgs e)
{
if (solutionsModel.SelectedItem != null && solutionsModel.SelectedItem is SolutionViewModel)
{
if (e.OriginalSource != null && e.OriginalSource is TreeViewItem)
{
FocusManager.SetFocusedElement(solutionsModel, e.OriginalSource as TreeViewItem);
}
}
}
Я пытаюсь установить фокус на TreeViewItem
в ControlTemplate
:
<Style d:IsControlPart="True" TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Trigger.Setters>
<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}"></Setter>
</Trigger.Setters>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true" />
<Condition Property="IsSelectionActive" Value="false" />
</MultiTrigger.Conditions>
<!--
<MultiTrigger.Setters>
<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}"></Setter>
</MultiTrigger.Setters>
-->
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Оба эти метода получают фокус, но теряют фокус клавиатуры (TreeViewItem.IsSelectionActive
неверно).Никакой другой элемент в окне не имеет фокуса или фокуса клавиатуры, который я могу сказать (в тесте у меня только одно текстовое поле только для чтения на другой панели, которое могло бы сфокусироваться).Интересно, что я могу сфокусировать клавиатуру на (закомментированном) MultiTrigger
, где IsSelectionActive
ложно, но, конечно, это постоянно заставляет клавиатуру фокусироваться на TreeViewItem
.
Есть ли другой способу вас больше шансов получить фокусировку на клавиатуре, и в каких условиях нельзя получить фокусировку на клавиатуре?