TreeView 이용하여 파일구조를 보는 프로그램 입니다.
DiskDirectory.cs
using System.Collections.Generic; using System.IO;
namespace WpfApp { public class DiskDirectory { /// <summary> /// 대렉토리 정보입니다. /// </summary> DirectoryInfo directoryInfo;
/// <summary> /// 생성자입니다. /// </summary> /// <param name="directoryInfo"></param> public DiskDirectory(DirectoryInfo directoryInfo) { this.directoryInfo = directoryInfo; }
/// <summary> /// 디렉토리 명입니다. /// </summary> public string Name { get { return directoryInfo.Name; } }
/// <summary> /// 디렉토리의 자식 디렉토리입니다. /// </summary> public List<DiskDirectory> Subdirectories { get { List<DiskDirectory> diskDirectoryList = new List<DiskDirectory>(); DirectoryInfo[] subDirectoryInfos;
try { subDirectoryInfos = directoryInfo.GetDirectories(); } catch { return diskDirectoryList; }
foreach (DirectoryInfo subDirectoryInfo in subDirectoryInfos) { diskDirectoryList.Add(new DiskDirectory(subDirectoryInfo)); }
return diskDirectoryList; } } } }
|
MainWindow.xaml.cs
using System; using System.IO; using System.Windows; using System.Windows.Controls; using System.Windows.Data;
namespace WpfApp { /// <summary> /// MainWindow.xaml에 대한 상호 작용 논리 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent();
Title = "Template the Tree";
// TreeView 를 정의합니다. TreeView treevue = new TreeView(); Content = treevue;
// DiskDirectory 를 기반으로 하는 HierarchicalDataTemplate 을 만듭니다. HierarchicalDataTemplate template = new HierarchicalDataTemplate(typeof(DiskDirectory));
// template 의 ItemSource 에 바인딩될 항목을 정의합니다.("Subdirectories") template.ItemsSource = new Binding(nameof(DiskDirectory.Subdirectories));
// 화면에 라벨로 표시될 TextBlock 을 위한 FrameworkElementFactory 를 정의합니다. FrameworkElementFactory factoryTextBlock = new FrameworkElementFactory(typeof(TextBlock));
// TextBlock 에 바인딩될 항목을 정의합니다. ("Name") factoryTextBlock.SetBinding(TextBlock.TextProperty, new Binding(nameof(DiskDirectory.Name)));
// template 의 VisualTree 에 Textblock 을 설정합니다. // 참고 : https://docs.microsoft.com/ko-kr/dotnet/framework/wpf/advanced/trees-in-wpf?redirectedfrom=MSDN template.VisualTree = factoryTextBlock;
DiskDirectory dir = new DiskDirectory(new DirectoryInfo(Path.GetPathRoot(Environment.SystemDirectory)));
// TreeViewItem 을 생성하여 루트요소를 바인딩하고 template 를 설정합니다. TreeViewItem item = new TreeViewItem(); item.Header = dir.Name; item.ItemsSource = dir.Subdirectories; item.ItemTemplate = template;
treevue.Items.Add(item);
item.IsExpanded = true;
// 모두 펼칩니다. (항목이 많은경우 시간 오래 걸림) //item.ExpandSubtree(); } } }
|
'C# > WPF' 카테고리의 다른 글
[WPF] TextBox 개행 가능하도록 하기 (0) | 2020.07.07 |
---|---|
[WPF] DispatcherObject를 상속받은 WPF의 모든 public 클래스를 트리로 보여주는 프로그램 (0) | 2020.07.07 |
[WPF] 하단에 시계 표시하기 (0) | 2020.07.07 |
[WPF] RichTextBox 내용 Clear 하기 (3가지 방법) (0) | 2020.07.07 |
[WPF] 이미지 주소를 BitmapImage 으로 변화하기 (0) | 2020.07.07 |