0

長い一日の仕事の後の私かどうかはわかりません...またはWPFタイプのツリーで何かが異なります。ツリーにデータを追加していて、それが親ノードである場合、その子を追加する必要がありますが、SelectedItem は常に null です!

コメントや指示は役に立ちます。

ありがとう。

XAML:

  <TreeView x:Name="TreeView1" Grid.Row="0">
  </TreeView>

Code:
       TreeView myTree = FindChild<TreeView>(Application.Current.MainWindow, "TreeView1");

       myTree.Items.Add(ObjEmployee.Tag);
       TreeViewItem tvi = (TreeViewItem) myTree.SelectedItem;  
//my assumption was that when an item is added to tree most recent used node will be selected but it seems something is avoiding it or maybe works in a different way.
4

1 に答える 1

0

コードスニペットを投稿する必要があります..何が必要なのかわかりません。

階層テンプレート ( http://msdn.microsoft.com/en-us/library/ms742521.aspx ) を使用している場合、SelectIedtem のオブジェクトは、ItemsSource に入力したデータの 1 つになります。


それ以外の場合、「SelectedItem」は、ツリービュー内に配置する任意のタイプのビジュアル コンポーネントにすることができます。

var treeItem = myTree.SelectedItem;
if (treeItem != null)
    treeitem.GetType().Name;

通常、ツリービュー内で TreeViewItem を使用すると、すべてのオブジェクトは treeViewItem.Items にあります。


(編集)これを試すことができます:

            var result = FindVisualChildren<TreeViewItem>(treeView);

            foreach (var item in result)
            {
                if (item.IsSelected)
                {
                    ....
                }
            }

    public static IEnumerable<T> FindVisualChildren<T>(FrameworkElement depObj) where T : FrameworkElement
    {
        if (depObj != null)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {
                FrameworkElement child = (FrameworkElement)VisualTreeHelper.GetChild(depObj, i);
                if (child != null && child is T)
                {
                    yield return (T)child;
                }

                foreach (T childOfChild in FindVisualChildren<T>(child))
                {
                    yield return childOfChild;
                }
            }
        }
    }
于 2012-06-26T03:01:39.417 に答える