2009-10-14 98 views
1

如何将点击事件附加到TreeViewItem上?如何让MouseLeftButtonDown在TreeViewItem上工作,就像它在TextBlock上工作一样?

为TextBlock的,但不是树型视图以下工作:

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> 

代码隐藏:

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

虽然不是一个正确的答案,把树型视图内部的文本块(如通过模板),也允许使用树型视图内MouseLeftButtonDown事件的。 – 2011-02-24 00:56:12

回答

4

尝试使用的PreviewMouseLeftButtonDown事件,而比MouseLeftButtonDown。

Accoding到MSDN文档既PreviewMouseLeftButtonDownMouseLeftButtonDown使用直接的路由策略,所以我也不太清楚为什么是这样的情况。但是,文档可能不正确,因为通常“预览”事件使用“隧道”策略,而其对应方使用“泡泡”。

+0

PreviewMouseLeftButtonDown效果很好,不知道是什么被阻挡,要记住的好东西,谢谢。 – 2009-10-14 14:57:22

0

上述解决方案的工作原理,但它阻止在父节点上粘连时扩展树视图节点。

问候