分享

WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法

 牛人的尾巴 2016-04-25

WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法 - 幕三少

1.TreeView选择事件执行两次

Very often, we need to execute some code in SelectedItemChanged depending on the selected  TreeViewItem . But SelectedItemChanged is called twice. This is due to stealing focus from the main window, which is screwing something up.

What we have to do to avoid this is simply delay the call to our code, i.e., MyFunction() which we need to execute in SelectedItemChanged . Here's a workaround which delays the call to open the new window until the item selection code finishes up:

private delegate void NoArgDelegate();
 
void Window1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
  Dispatcher.BeginInvoke(DispatcherPriority.Background, 
        (NoArgDelegate)delegate { MyFunction(); });
}

2.Treeview获取父节点

private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
      //节点(是子节点或者是根节点)
      TreeViewItem item = treeView1.SelectedItem as TreeViewItem;
 
      //获取父节点
      TreeViewItem parent = item.Parent as TreeViewItem;
      //判断父节点是否存在
      if (parent != null) {
        //显示父节点信息,这里显示 Header 信息
        MessageBox.Show("父节点的Header:" + parent.Header.ToString());
      } else {
        MessageBox.Show("没有父节点!");
      }
 
    }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多