2009-10-14 103 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

上述解決方案的工作原理,但它阻止在父節點上粘連時擴展樹視圖節點。

問候