2009-10-14 77 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)); 
    } 
} 
相关问题