2009-10-14 5 views
1

Comment est-ce que je peux attacher un événement de clic sur un TreeViewItem?Comment puis-je faire fonctionner MouseLeftButtonDown sur TreeViewItem comme si cela fonctionnait sur TextBlock?

Les travaux suivants pour le TextBlock mais pas le TreeViewItem:

XAML:

<Window x:Class="TestClickTree2343.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
     <Style TargetType="TreeViewItem"> 
      <Setter Property="IsExpanded" Value="True" /> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <TextBlock Text="Click this" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/> 
     <TreeViewItem Header="Files"> 
      <TreeViewItem Header="File 1"> 
       <TreeViewItem Header="Part 1"> 
        <TreeViewItem Header="Paragraph 1" MouseLeftButtonDown="TreeViewItem_MouseLeftButtonDown"/> 
        <TreeViewItem Header="Paragraph 2"/> 
       </TreeViewItem> 
      </TreeViewItem> 
     </TreeViewItem> 
    </StackPanel> 
</Window> 

code-behind:

using System.Windows; 
using System.Windows.Input; 

namespace TestClickTree2343 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 

     private void TreeViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      MessageBox.Show("treeview item was clicked, this does NOT work"); 
     } 

     private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      MessageBox.Show("textblock item was clicked, this WORKS"); 
     } 
    } 
} 
+0

Alors que pas une réponse appropriée, mettre un textblock intérieur du TreeViewItem (par exemple via un modèle) permet également l'utilisation de l'événement MouseLeftButtonDown à l'intérieur du TreeViewItem. –

Répondre

4

Essayez d'utiliser l'événement PreviewMouseLeftButtonDown plutôt que MouseLeftButtonDown.

Accodant à la MSDN docs à la fois les PreviewMouseLeftButtonDown et MouseLeftButtonDown en utilisant une stratégie de routage direct donc je ne sais pas trop pourquoi c'est le cas. Cependant, il est possible que la documentation soit incorrecte, car les événements 'Preview' utilisent généralement la stratégie Tunneling pendant que leurs homologues utilisent la bulle.

+0

PreviewMouseLeftButtonDown fonctionne bien, pas sûr de ce qui est bloqué soit, bonne chose à retenir, merci. –

0

La solution ci-dessus fonctionne, mais elle empêche l'extension des nœuds treeview lors du cliquage sur un nœud parent.

Cordialement