我用HierarchicalDataTemplate绑定treeview的数据后,怎么添加treeviewitem的右击事件?这是xaml中的代码 <TreeView Name="treeView2" Margin="3,62,0,0" HorizontalAlignment="Left" Width="317" TreeViewItem.Selected="treeView2_Selected">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate DataType="{x:Type local:PropertyNodeItem}" ItemsSource="{Binding Path=Children}" >
            <StackPanel Orientation="Horizontal">
                <Image VerticalAlignment="Center" Source="{Binding Icon}" Width="16" Height="16" Margin="0,0,2,2"></Image> 
                <TextBlock VerticalAlignment="Center" Text="{Binding DisplayName}" ></TextBlock> 
                <Image VerticalAlignment="Center" Source="{Binding EditIcon}" Margin="2,0,0,0"></Image> 
                <StackPanel.ToolTip>
                    <TextBlock VerticalAlignment="Center" Text="{Binding Name}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock> 
                </StackPanel.ToolTip> 
            </StackPanel> 
        </HierarchicalDataTemplate> 
        </TreeView.ItemTemplate>
        </TreeView>
treeviewitem的一些事件应该怎么添加?

解决方案 »

  1.   

      private void treeView2_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
            {        }
    MouseRightButtonDown="treeView2_MouseRightButtonDown">
                <TreeView.ItemTemplate>
      

  2.   

    我要的是treeviewitem的事件,你说的那个事件我不用跑到这来问,不过还是谢谢你
      

  3.   

    可以在ItemTemplate里捕捉StackPanel的右键事件
      

  4.   

    恩,这个无法获取treeviewitem的一些信息,苦闷中
      

  5.   

    为啥不行?        private void treeView2_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
            {
                TreeViewItem aa = (TreeViewItem)this.treeView2.SelectedItem;            if (aa.Header.ToString().Trim() == "2")
                {
                    MessageBox.Show("aaaaa");
                }
            }
      

  6.   

    我的意思是怎么给HierarchicalDataTemplate绑定数据后的treeview的treeviewitem绑定事件,而不是仅仅这个右击事件
    在网上好像有这种说法
     <Style  TargetType="TreeViewItem">
                    <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="TreeViewItem_PreviewMouseRightButtonDown"/>
      </Style> 
    这段代码有问题,看上去貌似是注册事件的,就是不会用
      

  7.   


    可以的,你可以使用Command,然后把需要的信息用CommandParameter传给Command的处理方法就可以了
    具体方法:
    在Blend设计器中,选中StackPanel,在资产面板中双击选择行为,会生成如下的代码:
          <StackPanel Orientation="Horizontal">
             <i:Interaction.Triggers>
               <i:EventTrigger EventName="MouseLeftButtonDown">
                  <i:InvokeCommandAction Command="{Binding CustomCommand}" CommandParameter="{Binding}"/>
               </i:EventTrigger>
            </i:Interaction.Triggers>
            <Image...
            ...
         </StackPanel>上面要将绑定项的DataContext数据传给Command方法,如果要将treeview传给Command方法,则使用:CommandParameter="{Binding ElementName=treeView2}"关于如何使用Command可以查找下微软的帮助其实StackPanel的DataContext就是绑定的数据项,如果你只要取绑定行的数据,那么直接从sender里获取DataContext就可以了
      

  8.   

    EventSetter是通过Style方式设置控件的事件,跟直接在<StackPanel Orientation="Horizontal" MouseLeftButtonDown="treeview_ButtonDown"/> 是一样的,如果Style的TargetType对象没有对应的事件,一样不能使用
      

  9.   

    如果是查询慢,可以通过异步绑定, ItemsSource="{Binding Children, IsAsync=True...如果是显示慢,可以考虑部分加载,先加载最上层的节点,展开父节点时候再加载显示子节点