2016-10-11 2 views
0

У меня есть окно, заполненное TreeView и другими элементами управления. После того, как пользователь выбрал элемент TreeView, я хочу вызвать команду, когда нажата клавиша Enter, и затем смените фокус на TreeView, чтобы можно было выбрать выделение.Управление фокусировкой не работает

Команда вызова работает с этим кодом:

<Window ...> 
    ... 
    <Window.InputBindings> 
     <KeyBinding Command="{Binding Path=MyCommand}" Key="Enter"/> 
    </Window.InputBindings> 
    ... 
    <TreeView x:Name="tv" ...> 
     ... 
    </TreeView> 
</Window> 

Но я не знаю, как изменить фокус на TreeView после того, как команда была выполнена. Как это сделать в XAML или в Codebehind? Ответы XAML являются предпочтительными.

Это то, что я пробовал:

<Window.InputBindings> 
    <KeyBinding Command="{Binding Path=ChangeCategoryCommand}" Key="Enter" FocusManager.FocusedElement="{Binding ElementName=tv}"/> 
</Window.InputBindings> 

Но выбор в TreeView не виден после нажатия Enter, так что я, очевидно, делает что-то неправильно ...

ответ

1

только фоновым кодом решение :

<Window 
PreviewKeyUp="OnPreviewKeyUp"> 
<Window.InputBindings> 
    <KeyBinding Key="Enter" Command="{Binding Path=MyCommand}" /> 
</Window.InputBindings> 

<TreeView x:Name="tv" /> 

и отделенного кода:

private void OnPreviewKeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      this.tv.Focus(); 
     } 
    } 

FYI: Выбранный элемент древовидной структуры является readonly, поэтому он не может использоваться с привязкой.

Смежные вопросы