2009-06-16 155 views
2

我已經注意到了我現在正在處理的應用程序,所以我創建了一個簡單的測試應用程序來演示。以下是我的一個窗口和treeview項目的事件處理程序。如果展開「一個」或「兩個」父節點,然後單擊其中一個子項,則在文本框上調用Focus()方法後,所選子項不會顯示爲選定項。相反,選擇會彈出到父節點。有沒有人有任何想法如何克服這一點,並選擇留在選定的子節點?謝謝。Treeview物品在失去焦點時失去選擇

<Window 
x:Class="DockingSample.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" 
WindowState="Maximized" 
> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="300" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <TreeView Margin="6"> 
     <TreeViewItem Header="One"> 
      <TreeViewItem Header="One" Selected="TreeViewItem_Selected" /> 
      <TreeViewItem Header="Two" Selected="TreeViewItem_Selected" /> 
      <TreeViewItem Header="Three" Selected="TreeViewItem_Selected" /> 
     </TreeViewItem> 
     <TreeViewItem Header="Two"> 
      <TreeViewItem Header="One" Selected="TreeViewItem_Selected" /> 
      <TreeViewItem Header="Two" Selected="TreeViewItem_Selected" /> 
      <TreeViewItem Header="Three" Selected="TreeViewItem_Selected" /> 
     </TreeViewItem> 
    </TreeView> 

    <TextBox Grid.Column="1" x:Name="textbox" /> 
</Grid> 

private void TreeViewItem_Selected(object sender, RoutedEventArgs e) 
    { 
     textbox.Focus(); 
    } 

通過上面的窗口和 「選定」 事件HANDL

+0

只是一個小的重構註釋,而不是把每個樹視圖項中的選擇事件,您可以:; – apandit 2009-06-16 21:04:25

+0

看來,雙擊子元素正常工作,但不是單擊單擊...:S – apandit 2009-06-16 21:21:08

+0

是的,我知道,但在這種情況下,我不希望父節點實際上導致動作發生,只有這些孩子。 我會假設雙擊「作品」,因爲第二次點擊重新捕獲焦點到樹視圖,並且即使父項被突出顯示,孩子仍可能被標記爲選中,因此它不會在第二次點擊時再次被選中。 但問題仍然存在,爲什麼當樹視圖失去焦點時突出顯示轉移到父項? – 2009-06-17 12:09:44

回答

3

給予一定時間的TreeView通過這樣做,而不是結束他們的活動:

Dispatcher.BeginInvoke (DispatcherPriority.Input,new Action(()=> textbox.Focus()));

-1

將TreeView.HideSelection設置爲false。