【问题标题】:Is there a way to attach an event in a XAML style?有没有办法以 XAML 样式附加事件?
【发布时间】:2009-10-14 15:00:35
【问题描述】:

我希望每个可点击的 TreeViewItem 都执行TreeViewItem_MouseLeftButtonDown,有没有办法把它放在样式中,所以我不必到处定义它。我可以在后面的代码中遍历所有子项,但我认为会有一种更简单的方法来完成它。

下面的代码给了我:

找不到样式属性 '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>

【问题讨论】:

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

标签: events xaml styles


【解决方案1】:

在 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));
    }
}

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多