双击访问C#中的WPF TreeViewItem

时间:2018-09-15 13:45:48

标签: c# wpf treeview

我想双击访问WPF TreeViewItem。在我的WPF中,它看起来像这样:

<TreeView x:Name="ExerciseTreeView" Background="#FFF9F9F9" MouseDoubleClick="Exercise_MouseDoubleClick" ScrollViewer.VerticalScrollBarVisibility="Auto"  Grid.Column="2" />

在我的C#代码中,我像这样添加TreeViewItems(列表中有一些物理治疗任务):

RumpfItem.Header = "Rumpf";

ObereItem.Header = "Obere Extremität";

UntereItem.Header = "Untere Extremität";

DehnenItem.Header = "Dehnen";

FaszienItem.Header = "Faszientraining";



foreach(var item in Model.Categories_List)
{
  Task task = Model.Task_List.First(t => t.TaskID == item.TaskID);

  if (item.CategoryID == 1)
  {
    RumpfItem.Items.Add(new TreeViewItem() { Header = task.Name });
  }
  if (item.CategoryID == 2)
  {
    ObereItem.Items.Add(new TreeViewItem() { Header = task.Name });
  }
  if (item.CategoryID == 3)
  {
    UntereItem.Items.Add(new TreeViewItem() { Header = task.Name });
  }
  if (item.CategoryID == 4)
  {
    DehnenItem.Items.Add(new TreeViewItem() { Header = task.Name });
  }
    if (item.CategoryID == 5)
  {
    FaszienItem.Items.Add(new TreeViewItem() { Header = task.Name });
  }
  }
  ExerciseTreeView.Items.Add(RumpfItem);
  ExerciseTreeView.Items.Add(ObereItem);
  ExerciseTreeView.Items.Add(UntereItem);
  ExerciseTreeView.Items.Add(DehnenItem);
  ExerciseTreeView.Items.Add(FaszienItem);
  OpenTrainingPlan_Tab();

它可以正确显示,但是当我双击TreeViewItem时,没有任何反应。那么如何访问在C#代码中单击的任务?

1 个答案:

答案 0 :(得分:1)

您可以通过将事件设置为每个项目来解决此问题。可以通过设置以下项的样式来完成:

<TreeView x:Name="MyTreeView">
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <EventSetter Event="MouseDoubleClick"
                         Handler="HandleItemDoubleClick"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>

比方说,您的树状视图包含最少的项,例如

public class Item
{
    public string Name { get; set; }
}

其中包含一些物品:

MyTreeView.Items.Add(new Item { Name = "1" });
MyTreeView.Items.Add(new Item { Name = "2" });

然后,您可以在处理程序中访问被单击的项目,例如:

private void HandleItemDoubleClick(object sender, RoutedEventArgs e)
{
    if (((TreeViewItem)sender).DataContext is Item item)
    {
        Debug.WriteLine(item.Name);
    }
}