C#의 WPF로 툴을 만들다 보면 TreeView를 쓸때가 있습니다. 대략 요런것죠.
파일 디렉토리 구조라든가, 씬그래프 (SceneGraph) 라든가 유용하게 써먹을데가 많습니다. 코드로 보면 대략 이렇게 사용하겠죠.
- TreeViewItem newItemC1 = new TreeViewItem();
- newItemC1.Header = "카테고리1";
- newItemC1.Items.Add("아이템1");
- newItemC1.Items.Add("아이템2");
- treeView1.Items.Add(newItemC1);
- TreeViewItem newItemC2 = new TreeViewItem();
- newItemC2.Header = "카테고리2";
- newItemC2.Items.Add("아이템1");
- newItemC2.Items.Add("아이템2");
- treeView1.Items.Add(newItemC2);
좋습니다. TreeView 컨트롤을 사용하다 보면 이 중에 아이템이 선택되었을때 어떤 아이템이 선택되었는지 알아야 할때가 있어요.
- private void OnDoubleClickItem(object sender, MouseButtonEventArgs e)
- {
- TreeView treeView = sender as TreeView;
- if (null != treeView)
- {
- string selectedItemName = treeView.SelectedItem as string;
- }
- }
간단하게 마우스 클릭 이벤트를 받아 TreeView의 SelectedItem을 얻어오면 됩니다. 그런데 아이템1을 선택했다고 하면, 이 아이템1이 카테고리1의 아이템1인지, 카테고리2의 아이템1인지는 어떻게 판별할 수 있을까라는 문제가 생깁니다.
( 아시는 분은 가르켜주세요 )
아래는 제가 사용한 방법입니다. 먼저, Helper 클래스를 하나 만듭니다. 추가할 오브젝트와 그리고 상위 TreeViewItem을 보관합니다.
- public class TreeViewHelper
- {
- public object Value
- {
- get { return mObj; }
- }
- public TreeViewItem ParentTree
- {
- get { return mParentTreeViewItem; }
- }
- private object mObj;
- private TreeViewItem mParentTreeViewItem;
- public TreeViewHelper(object obj, TreeViewItem parentTreeViewItem)
- {
- mObj = obj;
- mParentTreeViewItem = parentTreeViewItem;
- }
- public override string ToString()
- {
- return mObj.ToString();
- }
- }
TreeViewItem에 아이템을 추가할때 이 Helper 클래스를 이용합니다.
- TreeViewItem newItemC1 = new TreeViewItem();
- newItemC1.Header = "카테고리1";
- newItemC1.Items.Add(new TreeViewHelper("아이템1", newItemC1));
- newItemC1.Items.Add(new TreeViewHelper("아이템2", newItemC1));
- treeView1.Items.Add(newItemC1);
- TreeViewItem newItemC2 = new TreeViewItem();
- newItemC2.Header = "카테고리2";
- newItemC2.Items.Add(new TreeViewHelper("아이템2", newItemC2));
- newItemC2.Items.Add(new TreeViewHelper("아이템2", newItemC2));
- treeView1.Items.Add(newItemC2);
이제 이 Helper 클래스를 통해 선택된 아이템의 값과 상위 TreeViewItem까지 조사할수 있게 되었습니다.
- private void OnDoubleClickItem(object sender, MouseButtonEventArgs e)
- {
- TreeView treeView = sender as TreeView;
- if (null == treeView)
- return;
- TreeViewHelper selectedItem = treeView.SelectedItem as TreeViewHelper;
- if (null == selectedItem)
- return;
- TreeViewItem selectedParentItem = selectedItem.ParentTree as TreeViewItem;
- if (null == selectedParentItem)
- return;
- string parentItemHeader = selectedParentItem.Header.ToString();
- }
끝~
반응형
'프로그래밍' 카테고리의 다른 글
python 스크립트를 하나의 실행 파일로 만들어보기 (16) | 2012.09.02 |
---|---|
D3D11에서 Lock ?? (6) | 2012.09.02 |
cocos2d 윈도우 개발 환경 만들기 ( cocos2d for window ) (9) | 2012.07.14 |
Fast sine approximation (11) | 2012.07.12 |
PC에서 3D 입체 영상 게임 개발하기 #4 (1) | 2012.07.09 |