2012-01-11 2 views
2

TreeViewItem을 활성화하는 방법?TreeViewItem에서 SelectionActive 설정 WPF

treeViewItem.IsSelected = true; 

내가이 할 노력 : 나는이 코드를 사용하여 만 선택 할 수

treeViewItem.Focus() 

을하지만 어떻게 treeViewItem 활성화하고 선택하게하는

를 작동하지 않습니다?

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

상황에 따라 다르다 : 여기

내 트 리뷰의 코드입니다. 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/> 

어떤이 코드가하는 일은 선택된 노드에서 루트까지의 경로를 찾을 수 처음이다. (N1.ParentNode 대신 item.Parent를 사용하는 경우를 제외하고는 XmlNode 또는 다른 객체 대신 TreeViewItem이있는 경우)

그런 다음 루트에서 이동하여 모든 노드를 확장하고 레이아웃 (중요).

마지막으로, 선택된 노드는 IsSelected = true로 설정되고 포커스가 제공됩니다.

+0

내 treeView가 확장되어 다음과 같이 TreeViewItem을 만듭니다. TreeViewItem item = new TreeViewItem(); –

+0

나무를 어떻게 채우고 있습니까? – AkselK

+0

내 코드에서 편집했습니다. 내 treeView를 참조하십시오. –

관련 문제