2013-07-09 46 views
1
<DataTemplate DataType="{x:Type EntityType:FixedDevice}"> 
    <TextBlock Text="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource NameConverter}}"/> 
</DataTemplate> 

<TreeView.ItemContainerStyle> 
    <Style TargetType="TreeViewItem"> 
     <EventSetter Event="PreviewMouseRightButtonUp" Handler="TreeViewItem_RightClick"/> 
    </Style> 
</TreeView.ItemContainerStyle> 
<TreeViewItem Header="Data Warehouse"> 
    <TreeViewItem.Items> 
     <TreeViewItem Header="Platforms"> 
      <TreeViewItem.Items> 
       <TreeViewItem> 
        <TreeViewItem.Header> 
         <TextBlock Text="{Binding RelativeSource={RelativeSource Self}, 
            Path=Parent.Items.Count, 
            StringFormat=Public ({0})}"> 
         </TextBlock> 
        </TreeViewItem.Header> 
       </TreeViewItem.Header> 
      </TreeViewItem.Items> 
     </TreeViewItem> 
    </TreeViewItem.Items> 
</TreeViewItem> 

private void TreeViewItem_RightClick(object sender, MouseButtonEventArgs e) { 
     TreeViewItem item = sender as TreeViewItem; 
     if(item != null) { item.Focus(); item.IsSelected = true; } 
     e.Handled = true; 
} 

如何當我右擊,它只選擇最頂級的節點?而不是我點擊的那個?類似於ItemsSource,其中Item本身不是TreeViewItem,但DataTemplateTextBlock,如何以可視方式在TreeView中選擇對象?TreeViewItem與ItemsSource右鍵單擊不選擇項目

編輯,請參閱下面的答案根據@Viv答案。 我最後不得不使用e.OriginalSource檢索TextBlock那麼TreeViewItemItem是英寸

private void TreeViewItem_RightClick(object sender, MouseButtonEventArgs e) { 
    TreeViewItem item = (e.OriginalSource as FrameworkElement).Parent as TreeViewItem; 
    if(item == null) { 
     item = e.Source as TreeViewItem; 
     if(item == null) { 
      return; 
     } 
    } 
    item.IsSelected = true; 
    e.Handled = true; 
} 

回答

1

這是因爲你想找的是e.Source,而不是sender

嘗試切換您的鼠標右鍵單擊處理程序於:

private void TreeViewItem_RightClick(object sender, MouseButtonEventArgs e) { 
    TreeViewItem item = e.Source as TreeViewItem; 
    if (item == null) 
    return; 
    // item.Focus(); 
    item.IsSelected = true; 
    e.Handled = true; 
} 

Sample Download

+0

我試過這樣做,它仍然給了我相同的結果。 'e.Source'與'sender'相同。 –

+0

@Bob。錯誤不適合我我只能在使用'sender'的處理程序中重現您的問題。 'e.Source'很好。我已經爲答案添加了一個示例。試試看看它是否適用於您,或者即使在該項目中也看到同樣的問題 – Viv

+0

好的,我找出問題出在哪裏,它在'TreeViewItem.Header'中,如果它沒有設置爲'Header ='Text Here'',它不響應點擊(見上面的'TreeViewItem.Header'編輯),但裏面的'Items'做了,'e.Source'是root之後的第一個節點。 –

相關問題