none
Treeview控件,子节点的双击事件 RRS feed

  • 问题

  • <Treeview>

     <TreeviewItem Header="1">

          <TreeviewItem Header="2"/>     //子节点1

          <TreeviewItem Header="3"/>     //子节点2

    </TreeviewItem >

    </Treeview>

    假如我双击某一子节点时,想要发生一个事件,该如何做?

    当<Treeview>没有子节点时为何没有前面那个三角形小图标

    2015年12月22日 12:12

答案

  • 你好,

    1.想双击子节点触发事件,直接响应MouseDoubleClick事件即可。

    你可以响应TreeView的MouseDoubleClick,这种情况下,你可以在事件处理器中知道哪个子节点被双击(通过访问TreeView的选中项)。

    你也可以响应TreeViewItem的MouseDoubleClick,这种情况下,事件处理器可以设置得更简单,但是每一个TreeViewItem都要关联一遍,而且对于数据绑定构建的TreeView无能为力。

    你也可以编辑TreeView的控件模板,在模板中设置相关的事件响应。

    2.TreeViewItem没有子项时没有三角号的原因是,在TreeViewItem的默认控件模板中有一个触发器,该触发器会在没有子项时将三角号的Visibility设置为Hidden。

                                <Trigger Property="HasItems" Value="false">
                                    <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
                                </Trigger>

    例中,Expander即为“三角号”。

    ..关于控件模板的更多内容,你可以参考各控件的默认模板,查看他们的默认模板的一个比较简单的方式是,使用Blend打开你的工程,然后在Object and Timeline(对象和时间线)窗口中查看,例如TreeView:

    想要查看和编辑TreeView的模板,右击TreeView - Edit Template - Edit a Copy (编辑模板 - 编辑副本)

    

    想要查看和编辑TreeViewItem的模板,右击TreeView - Edit Additional Templates - Edit Generated Item - Edit a Copy

    通过理解和编辑这些模板,能够进一步了解WPF。


    • 已编辑 Lymim 2015年12月23日 2:27
    • 已标记为答案 3345544686 2016年5月2日 13:38
    2015年12月23日 2:25
  • 您好 3345544686,

    >>假如我双击某一子节点时,想要发生一个事件,该如何做?

    您需要注册TreeView的MouseDoubleClick事件,在事件响应方法中放入您想要执行的代码。

    <TreeView MouseDoubleClick="TreeView_MouseDoubleClick">
    private void TreeView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        //如果你只想要“树叶”节点被点击的时候执行某些代码,你可以使用如下分支逻辑
        if (!((sender as TreeView).SelectedItem as TreeViewItem).HasItems)
        {
        }
    }

    >>"当< TreeView >没有子节点时为何没有前面那个三角形小图标"

    有子节点的项有两个状态,分别为展开和收起,分别使用横向三角形和斜向三角形来表示。 没有子节点的项没有这两个状态,所以不需要使用三角形。您也可以通过自定义模板的方式来修改TreeView中每一项的样式。以下链接供你参考。

    http://www.cnblogs.com/anding/p/4996614.html

    Note: This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites; therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure that you completely understand the risk before retrieving any software from the Internet.  


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年12月23日 5:34
    版主

全部回复

  • 你好,

    1.想双击子节点触发事件,直接响应MouseDoubleClick事件即可。

    你可以响应TreeView的MouseDoubleClick,这种情况下,你可以在事件处理器中知道哪个子节点被双击(通过访问TreeView的选中项)。

    你也可以响应TreeViewItem的MouseDoubleClick,这种情况下,事件处理器可以设置得更简单,但是每一个TreeViewItem都要关联一遍,而且对于数据绑定构建的TreeView无能为力。

    你也可以编辑TreeView的控件模板,在模板中设置相关的事件响应。

    2.TreeViewItem没有子项时没有三角号的原因是,在TreeViewItem的默认控件模板中有一个触发器,该触发器会在没有子项时将三角号的Visibility设置为Hidden。

                                <Trigger Property="HasItems" Value="false">
                                    <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
                                </Trigger>

    例中,Expander即为“三角号”。

    ..关于控件模板的更多内容,你可以参考各控件的默认模板,查看他们的默认模板的一个比较简单的方式是,使用Blend打开你的工程,然后在Object and Timeline(对象和时间线)窗口中查看,例如TreeView:

    想要查看和编辑TreeView的模板,右击TreeView - Edit Template - Edit a Copy (编辑模板 - 编辑副本)

    

    想要查看和编辑TreeViewItem的模板,右击TreeView - Edit Additional Templates - Edit Generated Item - Edit a Copy

    通过理解和编辑这些模板,能够进一步了解WPF。


    • 已编辑 Lymim 2015年12月23日 2:27
    • 已标记为答案 3345544686 2016年5月2日 13:38
    2015年12月23日 2:25
  • 您好 3345544686,

    >>假如我双击某一子节点时,想要发生一个事件,该如何做?

    您需要注册TreeView的MouseDoubleClick事件,在事件响应方法中放入您想要执行的代码。

    <TreeView MouseDoubleClick="TreeView_MouseDoubleClick">
    private void TreeView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        //如果你只想要“树叶”节点被点击的时候执行某些代码,你可以使用如下分支逻辑
        if (!((sender as TreeView).SelectedItem as TreeViewItem).HasItems)
        {
        }
    }

    >>"当< TreeView >没有子节点时为何没有前面那个三角形小图标"

    有子节点的项有两个状态,分别为展开和收起,分别使用横向三角形和斜向三角形来表示。 没有子节点的项没有这两个状态,所以不需要使用三角形。您也可以通过自定义模板的方式来修改TreeView中每一项的样式。以下链接供你参考。

    http://www.cnblogs.com/anding/p/4996614.html

    Note: This response contains a reference to a third party World Wide Web site. Microsoft is providing this information as a convenience to you. Microsoft does not control these sites and has not tested any software or information found on these sites; therefore, Microsoft cannot make any representations regarding the quality, safety, or suitability of any software or information found there. There are inherent dangers in the use of any software found on the Internet, and Microsoft cautions you to make sure that you completely understand the risk before retrieving any software from the Internet.  


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年12月23日 5:34
    版主