确定或传递WPF树中鼠标事件的节点信息

时间:2010-11-14 23:26:54

标签: wpf xml templates treeview datatrigger

我有一个WPF树(绑定到XML数据)。摘录如下:

(好吧拍,我不能张贴照片,因为我的声誉还不够高。如果我的代表达到10,我会发布它。其他明智的想象一下常规树视图加一些加号和在各个级别的一些项目上减去图标)

因为我需要在某些级别进行特殊操作,所以我在树的某些级别插入了一些图标。好吧,实际上我已经在树的所有级别输入了它们,只是选择使用触发器在某些级别上显示它们。这是我的XAML代码:

<HierarchicalDataTemplate ItemsSource="{Binding Path=Elements}" x:Key="ViewEditTreeTemplate">
<StackPanel Orientation="Horizontal" Margin="1">
     <Label x:Name="ElementHeaderLabel" Height="16" Padding="1" VerticalContentAlignment="Center" FontSize="11" FontWeight="Normal">
          <MultiBinding Converter="{StaticResource ElementHeader}">
                <Binding Path="Name.LocalName"/>
                <Binding Path="Attribute[name].Value" />
          </MultiBinding>
     </Label>

     <Image x:Name="AddButton" Source="Images/button_add_icon.png"  Visibility="Collapsed" MouseLeftButtonUp="AddButton_MouseLeftButtonUp" />
     <Image x:Name="DeleteButton" Source="Images/button_delete_icon.png"  Visibility="Collapsed" MouseLeftButtonUp="DeleteButton_MouseLeftButtonUp" />
     <Image x:Name="EditButton" Source="Images/button_edit_icon.png"  Visibility="Collapsed" MouseLeftButtonUp="EditButton_MouseLeftButtonUp"/>
</StackPanel>

<HierarchicalDataTemplate.Triggers>


     <!-- Showing aditional buttons for RFFs list -->
     <DataTrigger Binding="{Binding Path=Name.LocalName}" Value="RFFs">
          <Setter TargetName="AddButton" Property="Visibility" Value="Visible"/>
          <Setter TargetName="DeleteButton" Property="Visibility" Value="Visible"/>
     </DataTrigger>

     <!-- Showing aditional buttons for RFF -->
     <DataTrigger Binding="{Binding Path=Name.LocalName}" Value="RFF">
          <Setter TargetName="EditButton" Property="Visibility" Value="Visible"/>
     </DataTrigger>

     <!-- Showing aditional buttons for Stations list -->
     <DataTrigger Binding="{Binding Path=Name.LocalName}" Value="Stations">
          <Setter TargetName="AddButton" Property="Visibility" Value="Visible"/>
          <Setter TargetName="DeleteButton" Property="Visibility" Value="Visible"/>

     </DataTrigger>

     <!-- Showing aditional buttons for AdjacentRegionNames list -->
     <DataTrigger Binding="{Binding Path=Name.LocalName}" Value="AdjacentRegionNames">
          <Setter TargetName="AddButton" Property="Visibility" Value="Visible"/>
          <Setter TargetName="DeleteButton" Property="Visibility" Value="Visible"/>

     </DataTrigger>
</HierarchicalDataTemplate.Triggers>

我的问题是这个。我已经为这些图标添加了一个事件处理程序(AddButton,DeleteButton和EditButton),但当我进入事件处理例程时,我不知道用户在点击节点时所在的节点。我可以将任何内容传递给该事件处理程序MouseLeftButtonUp(...),还是可以通过某种方式找出用户点击图像时的位置?

1 个答案:

答案 0 :(得分:0)

用户点击的TreeViewItem可通过事件args访问:

private void TreeView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            TreeViewItem ti = (TreeViewItem)e.Source;
            //do stuff here
        }

如果该项目实际上不是“TreeViewItem”,您应该能够将其转换为它的类型以便使用它。