2009-10-14 59 views
1

我希望每個可點擊的TreeViewItem都能執行TreeViewItem_MouseLeftButtonDown,有沒有辦法將這個放在樣式中,所以我不必在任何地方定義它。我可以在代碼後面運行所有的孩子,但我會認爲在一種風格中會有更簡單的方法。有沒有辦法在XAML風格中附加事件?

下面的代碼給我:

找不到樣式屬性 '的PreviewMouseLeftButtonDown' 在 型 'System.Windows.Controls.TreeViewItem'。

<Window x:Class="TestClickTree2343.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    WindowStartupLocation="CenterScreen" 
    Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
     <Style TargetType="TreeViewItem"> 
      <Setter Property="IsExpanded" Value="True" /> 
      <Setter Property="Foreground" Value="#aaa" /> 
     </Style> 
     <Style x:Key="TreeViewItemClickableStyle" TargetType="TreeViewItem"> 
      <Setter Property="Cursor" Value="Hand" /> 
      <Setter Property="Foreground" Value="#000" /> 
      <Setter Property="PreviewMouseLeftButtonDown" Value="TreeViewItem_MouseLeftButtonDown" /> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <TreeViewItem Header="Files"> 
      <TreeViewItem Header="File 1"> 
       <TreeViewItem Header="Part 1"> 
        <TreeViewItem Style="{StaticResource TreeViewItemClickableStyle}" Header="Paragraph 1"/> 
        <TreeViewItem Header="Paragraph 2"/> 
       </TreeViewItem> 
      </TreeViewItem> 
     </TreeViewItem> 
    </StackPanel> 
</Window> 
+0

無論你牛逼試圖去做,你可能會以錯誤的方式去做。這有一個非常Winforms的氣味。 – Will 2009-10-14 15:06:48

+0

我想要做的就是響應樹形視圖中的項目點擊。 – 2009-10-14 15:08:25

+0

我會改變模板,堅持在一個(風格)按鈕,並附加一個命令。但如果你沒有做MVVM這可能有點難... – Will 2009-10-14 15:14:55

回答

0

使用SelectedItemChanged在樹視圖來代替:

XAML:

<TreeView SelectedItemChanged="TreeView_SelectedItemChanged" BorderThickness="0"> 
    <TreeViewItem 
     Tag="File1" 
     Style="{StaticResource TreeViewItemClickableStyle}" 
     Header="File 1"> 

     <TreeViewItem Header="Part 1"> 

      <TreeViewItem Header="Paragraph 1"/> 

      <TreeViewItem 
       Tag="Paragraph1" 
       Style="{StaticResource TreeViewItemClickableStyle}" 
       Header="Paragraph 2"/> 

      <TreeViewItem Header="Paragraph 3"/> 
      <TreeViewItem Header="Paragraph 4"/> 
      <TreeViewItem Header="Paragraph 5"/> 

     </TreeViewItem> 
    </TreeViewItem> 
</TreeView> 

代碼隱藏:

private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
    TreeViewItem treeViewItem = ((TreeView)sender).SelectedItem as TreeViewItem; 
    if (treeViewItem.Tag != null) 
    { 
     string tag = treeViewItem.Tag.ToString(); 
     MessageBox.Show(String.Format("You clicked the tree item: {0}", tag)); 
    } 
} 
相關問題