2012-01-11 5 views
2

TreeViewItemをアクティブにするにはどうすればいいですか?TreeViewItemでSelectionActiveを設定するWPF

treeViewItem.IsSelected = true; 

私はこれを行う試してみました:私はそれだけでこのコードを使用して選択することができます

treeViewItem.Focus() 

しかし、それは、このツリービューアイテムをアクティブにし、選択にする方法

を働いていないのですか?

foreach(MyData dt in rootdata) 
{ 
    TreeViewItem root = new TreeViewItem() 
    root.IsExpanded = true; 
    root.Header = dt .DataHeader; 
    treeView.Items.Add(root); 

    foreach(AnotherData dat in parentData) 
    { 
     TreeViewItem parent = new TreeViewItem() 
     parent .IsExpanded = true; 
     parent .Header = dat .DataHeader; 
     root.Items.Add(parent);  

     foreach(AnotherData dat in childData) 
     { 
      TreeViewItem Child = new TreeViewItem() 
      Child.IsExpanded = true; 
      Child.Header = dat.DataHeader; 


      if(this treeViewItem should be selected) 
      { 
       child.IsSelected = true; 
       child.Focus(); 
      } 
      parent.Items.Add(Child); 
     } 
    } 
} 
+0

「treeViewItem.IsSelected」が呼び出されていますか? – Rohit

+0

はい、XamlでIsSelectionActiveのトリガーを設定しました。このアイテムが選択されているかアクティブであるかがわかります。 –

答えて

1

それが依存:ここ

は私のTreeViewコントロールのコードです。 TreeViewItemオブジェクトの取得方法、ツリーの外観(階層)、およびツリーの配置方法 これはデータバインディングですか、あなたのtreeViewItemは表示されていますか(折りたたまれた項目内にはありません)?

これは、指定したXMLノードを選択して展開するために使用したコードです。

private void SetSelected(XmlNode node) 
{ 
    Stack<XmlNode> path = new Stack<XmlNode>(); 

    XmlDataProvider dp = FindResource("xml") as XmlDataProvider; 
    XmlNode root = dp.Document.LastChild; 

    XmlNode n1 = node; 

    //path.Push(node); 
    while (n1.ParentNode != root) 
    { 
     n1 = n1.ParentNode; 
     if (n1 == null) 
      return; 
     path.Push(n1); 
    } 
    path.Push(root); 

    ItemsControl control = tree; 
    foreach (XmlNode n in path) 
    { 

     TreeViewItem tviItem = control.ItemContainerGenerator.ContainerFromItem(n) as TreeViewItem; 
     tviItem.IsExpanded = true; 
     tviItem.UpdateLayout(); 
     control = tviItem; 
    } 

    TreeViewItem resultItem = control.ItemContainerGenerator.ContainerFromItem(node) as TreeViewItem; 
    resultItem.IsSelected = true; 
    resultItem.Focus(); 
} 

XAML:

<XmlDataProvider x:Key="xml"/> 
<TreeView ItemsSource="{Binding Source={StaticResource xml}}" x:Name=tree/> 

何このコードはありませんが、選択したノードから、ルートまでのパスを見つけることが第一です。 (XmlNodeや他のオブジェクトの代わりにTreeViewItemを使用している場合は、n1.ParentNodeの代わりにitem.Parentを使用する以外は同様です)

次に、すべてのノードを展開し、レイアウト(重要)。

最後に、選択されたノードはIsSelected = trueと設定され、フォーカスが与えられます。

+0

TreeViewが展開されていて、次のようにTreeViewItemを作成します。 TreeViewItem item = new TreeViewItem(); –

+0

あなたはどのようにツリーにデータを埋め込みますか? – AkselK

+0

自分のコードで編集しました。そこにはツリービューがあります。 –

関連する問題