๐ WPF TreeView ๋๋๊ทธ ์ค ๋๋กญ์ผ๋ก ๋ ธ๋ ์ด๋ ๊ตฌํ
์ด๋ฒ์๋ TreeView ํญ๋ชฉ์ ๋ง์ฐ์ค๋ก ๋๋๊ทธํ์ฌ ์ด๋ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค. ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ์๋ UI์์ ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ฅ์ ๋๋ค.
๐ ๋ชฉ์ฐจ
- 1. Drag & Drop ์ด๋ฒคํธ ์ฐ๊ฒฐ
- 2. ๋ ธ๋ ์ด๋ ์ฒ๋ฆฌ
- 3. ๋์ผ ๋ถ๋ชจ ๋ด ์ด๋ vs ๊ณ์ธต ์ด๋
- 4. ํ์ฅ ํ
1. Drag & Drop ์ด๋ฒคํธ ์ฐ๊ฒฐ
XAML์์ TreeView
์ TreeViewItem
์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ค์ ํฉ๋๋ค.
<TreeView x:Name="MyTreeView"
PreviewMouseLeftButtonDown="TreeView_PreviewMouseLeftButtonDown"
Drop="TreeView_Drop"
AllowDrop="True">
...
</TreeView>
2. Drag ์์๊ณผ Drop ์ฒ๋ฆฌ
์ฝ๋ ๋นํ์ธ๋์์ ๋๋๊ทธ ์์๊ณผ ๋๋กญ ์ด๋ฒคํธ๋ฅผ ๊ตฌํํฉ๋๋ค.
private Category? _draggedItem;
private void TreeView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
TreeViewItem item = ItemsControl.ContainerFromElement(MyTreeView, e.OriginalSource as DependencyObject) as TreeViewItem;
if (item?.DataContext is Category category)
{
_draggedItem = category;
DragDrop.DoDragDrop(item, category, DragDropEffects.Move);
}
}
private void TreeView_Drop(object sender, DragEventArgs e)
{
if (_draggedItem == null) return;
Category? target = (e.OriginalSource as FrameworkElement)?.DataContext as Category;
if (target != null && target != _draggedItem && !IsChild(_draggedItem, target))
{
_draggedItem.Parent?.Children.Remove(_draggedItem);
_draggedItem.Parent = target;
target.Children.Add(_draggedItem);
}
}
private bool IsChild(Category parent, Category child)
{
if (parent.Children.Contains(child)) return true;
return parent.Children.Any(c => IsChild(c, child));
}
3. ๋ ธ๋ ๊ตฌ์กฐ ์ ์งํ๋ฉด์ ๊ณ์ธต ์ด๋
๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๊ณ ๋ คํ์ฌ ์์ ๋
ธ๋๋ฅผ ์์ ์ ํ์๋ก ๋๋๊ทธํ๋ ๊ฒ์ ๋ฐฉ์งํด์ผ ํฉ๋๋ค.
๋ํ, ๋์ผํ ๋ถ๋ชจ ๋ด์์์ ์์น ๋ณ๊ฒฝ๋ ๊ตฌํํ ์ ์์ต๋๋ค.
4. ํ์ฅ ํ
- Drop ์ ์์ด์ฝ ํจ๊ณผ ๋๋ ํ์ด๋ผ์ดํ ์ถ๊ฐ
- ๋ ธ๋ ์์ ๋ณ๊ฒฝ (Drag ์์น์ ๋ฐ๋ผ ์ธ๋ฑ์ค ๋ณ๊ฒฝ)
- Undo/Redo ๊ธฐ๋ฅ ์ฐ๋
โ ๋ง๋ฌด๋ฆฌ
TreeView์ ๋๋๊ทธ ์ค ๋๋กญ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด ๋ณต์กํ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ง๊ด์ ์ผ๋ก ๋ค๋ฃฐ ์ ์์ต๋๋ค.
๋ค์ ํธ์์๋ TreeView ํญ๋ชฉ์ ํ์ผ/๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์ฒ๋ผ ์ค์ ํ์ผ๊ณผ ์ฐ๋ํ๋ ์์ ๋ฅผ ์๊ฐํ๊ฒ ์ต๋๋ค!
'C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐๏ธ WPF TreeView์ ํ์ผ/ํด๋ ๊ตฌ์กฐ ์ฐ๋ํ๊ธฐ (0) | 2025.04.26 |
---|---|
๐๏ธ WPF TreeView์ ํ์ผ/ํด๋ ๊ตฌ์กฐ ์ฐ๋ํ๊ธฐ (0) | 2025.04.25 |
๐ WPF TreeView์์ ContextMenu๋ก ๋ ธ๋ ์กฐ์ ๊ธฐ๋ฅ ๊ตฌํ (0) | 2025.04.23 |
โ WPF TreeView ์ฒดํฌ๋ฐ์ค ๋ ธ๋ ๊ตฌํ ๋ฐ ์๋ ์ฒดํฌ (0) | 2025.04.22 |
WPF TreeView ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ (0) | 2025.04.16 |