2012-07-04 1 views
2

그래서 TreeViewItem (parentNode)을 만들고, TreeViewItem을 parentNode TreeViewItem에 추가합니다. 그런 다음 parentNode에 MouseButtonEventHandler를 추가하면 parentNode 내의 모든 TreeViewItem에 MouseButtonEventHandler가 생깁니다. 나는 실수로 MouseButtonHandler를 추가하기 위해 작성된 코드가 있는지 확인하기 위해 디버거를 실행했지만, 그렇지 않은 경우에는 ...TreeViewItem의 항목이 parent의 이벤트 처리기를 상속하는 이유는 무엇입니까?

편집 : 추가 테스트를 수행하고 두 레벨 아래로 내려갑니다. 이벤트 처리기를 자식 및/또는 부모가 아닌 특정 노드에만 격리시키는 방법이 있습니까?

public newClass() { 
    TreeViewItem parent = new TreeViewItem(); 

    TreeViewItem childOne = new TreeviewItem(); 
    addExpandClickListener(childOne); 

    TreeViewItem childTwo = new TreeviewItem(); 
    TreeViewItem childThree = new TreeViewItem(); 


    childTwo.Items.Add(childThree); 
    childOne.Items.Add(childTwo); 
    parent.Items.Add(childOne); 
    TreeViewObject.Items.Add(parent); 
} 

private void addExpandClickListener(TreeViewItem item) { item.MouseLeftButtonUp += new MouseButtonEventHandler(item_MouseClick); } 


private void item_MouseClick(object sender, MouseButtonEventArgs e) { 
    // Define click event as handled 
    e.Handled = true; 
    if(sender != e.Source) return; 
    // Handle click event 
    TreeViewItem root = (TreeViewItem)sender; 
    if(root.IsExpanded == true) CollapseRecursive(root); 
    else root.IsExpanded = true; 
    //else root.ExpandSubtree(); 
    ViewTree.Items.Refresh(); 
} 
+0

addExpandClickListener 메서드를 호출하는 위치는 어디입니까? 그 코드를주세요 – Dusan

+0

@Dusan addExpandClickListener 메서드를 호출하는 코드가 추가되었습니다. –

답변

2

parentNode 영역에는 하위 영역이 포함됩니다. 겹치는 사각형을 생각해보십시오. 텍스트 부분에 대한 클릭 만 수행하려는 경우 자체 DataTemplate을 제공하거나 시각적 트리를 사용하여 헤더를 찾고 클릭을 적용해야합니다.

+0

"텍스트 부분"이란 무엇입니까? –

+0

트리보기 항목이 여러 부분으로 나뉩니다. 플러스/마이너스, 헤더 또는 텍스트 및 하위 항목 그것을 플러스가 어린이의 가시성을 제어하는 ​​확장기와 같이 생각하십시오. 기본적으로 헤더는 문자열이지만 아무 것도 될 수 있습니다 (예 : UserControl, 버튼 등). –

+0

꽤 깔끔합니다. TextBlock을 사용하여 끝내고 텍스트를 추가하고 TextBlock에 click 이벤트 핸들러를 추가하고이를 Header에 추가했습니다. –