2016-10-11 77 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(); 
     } 
    } 

僅供參考:樹視圖的選定項目是隻讀的,所以對於綁定而言並非真正可用。