Events 是否有方法以XAML样式附加事件?

Events 是否有方法以XAML样式附加事件?,events,xaml,styles,Events,Xaml,Styles,我希望每个可点击的TreeViewItem都能执行TreeViewItem\u MouseLeftButtonDown,有没有办法将其放入样式中,这样我就不必到处定义它了。我可以在代码隐藏中遍历所有的孩子,但我认为有一种更简单的方式可以以一种风格完成 下面的代码给了我: 找不到样式属性 屏幕上的“PreviewMouseLeftButtonDown” 类型 “System.Windows.Controls.TreeViewItem” 改用TreeView中的SelectedItemChanged

我希望每个可点击的TreeViewItem都能执行
TreeViewItem\u MouseLeftButtonDown
,有没有办法将其放入样式中,这样我就不必到处定义它了。我可以在代码隐藏中遍历所有的孩子,但我认为有一种更简单的方式可以以一种风格完成

下面的代码给了我:

找不到样式属性 屏幕上的“PreviewMouseLeftButtonDown” 类型 “System.Windows.Controls.TreeViewItem”


改用TreeView中的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));
    }
}

代码隐藏:

<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));
    }
}
private void TreeView\u SelectedItemChanged(对象发送方,RoutedPropertyChangedEventArgs e)
{
TreeView项目TreeView项目=((TreeView)发件人)。选择EdItem作为TreeView项目;
if(treeViewItem.Tag!=null)
{
string tag=treeViewItem.tag.ToString();
Show(String.Format(“您单击了树项:{0}”,tag));
}
}

无论你想做什么,都可能是走错了路。这有一种Winforms的味道。我所要做的就是对树视图中项目的点击做出响应。我会更改模板,插入一个(样式化的)按钮并附加一个命令。但如果你不做MVVM,这可能有点难…好吧,我现在正在尝试: