본문 바로가기

윈도우 프로그램/C#

WPF에서의 트리뷰에 마우스 이벤트 걸기

xaml파일에서 ViewTree 설정 부분

<TreeView Height="196" HorizontalAlignment="Left" Margin="6,6,0,0" Name="tree_command" FontFamily="Tahoma" VerticalAlignment="Top" Width="439">

    <TreeViewItem Header="Parent Menu 1">

        <TreeViewItem Header="Sub Menu 1"></TreeViewItem>

    </TreeViewItem>

    <TreeViewItem Header="Parent Menu 2">

        <TreeViewItem Header="Sub Menu 1"></TreeViewItem>

        <TreeViewItem Header="Sub Menu 2"></TreeViewItem>

    </TreeViewItem>

                    

    <TreeView.ItemContainerStyle>

        <Style TargetType="{x:Type TreeViewItem}">

        <EventSetter Event="PreviewMouseLeftButtonDown" Handler="TreeView_MouseClick"/>

        </Style>

    </TreeView.ItemContainerStyle>

                   

</TreeView>



색별로 정리하면...

TreeView 선언

TreeView 메뉴 설정

TreeView의 마우스 더블클릭 시에 이벤트 발생하도록 Callback함수 등록


이벤트 설정 부분 설명

EventSetter Event="PreviewMouseLeftButtonDown"

                 Handler="TreeView_MouseClick"/>

--> PreviewMouseLeftButtonDown이벤트가 걸리면 

      TreeView_MouseClick함수 호출


다음으로 함수 부분 설정

private void TreeView_MouseClick(object sender, MouseButtonEventArgs e)

{

    string name;

    string parent_name;


    Point currentPosition = e.GetPosition(tree_command);

    TreeViewItem node = (TreeViewItem)tree_command.SelectedItem;

    if (node != null)

    {

        name = node.Header.ToString();

        parent_name = pnode.Header.ToString();

    }

}    

※ TreeView_MouseClick 함수 이름은 xaml파일에서 설정한 함수와 

    동일한 이름이어야 함

※ 부모가 없는 노드에서 pnode.Header.ToString을 호출하면 에러남. 

    부모가 있는지 없는지 확인하는 함수를 모르겠음.