Windows Explorer 클론에서 MVVM, 사용자 정의 컨트롤, 현대적인 UI/UX 디자인을 포함한 고급 WPF 기술을 선보입니다.
WPF Explorer는 "WPF INSIDE OUT" 책의 핵심 예제 프로젝트로, WPF(Windows Presentation Foundation)의 고급 기능을 탐구하고 실습하기 위해 설계되었습니다. 이 프로젝트는 WPF를 사용하여 Windows Explorer의 기능을 복제하며, MVVM 아키텍처, 의존성 주입, 사용자 정의 컨트롤, 고급 스타일링 기법 등 다양한 고급 WPF 기술을 적용합니다.
이 프로젝트를 통해 개발자들은 다음과 같은 실용적인 WPF 기술을 배울 수 있습니다:
- 복잡한 UI 구조의 효율적인 설계 및 구현
- MVVM 패턴을 사용한 깨끗하고 유지보수가 쉬운 코드 작성
- 사용자 정의 컨트롤을 통한 재사용 가능한 UI 컴포넌트 개발
- 다크 테마 구현을 포함한 현대적인 UI/UX 디자인 적용
- Jamesnet.Wpf 라이브러리를 사용한 WPF 개발 생산성 향상
이 프로젝트는 단순한 예제를 넘어 실제 업무에서 마주할 수 있는 복잡한 요구사항과 문제 해결 과정을 포함하고 있어, WPF 개발자들의 기술 향상에 크게 도움이 될 것입니다.
- Windows Explorer 기능의 고급 WPF 구현
- MVVM 아키텍처 및 의존성 주입 적용
- 사용자 정의 컨트롤을 사용한 모듈화된 UI 구성
- 다크 테마 기반의 현대적인 UI/UX 디자인
- Jamesnet.Wpf 라이브러리를 활용한 효율적인 개발
- 복잡한 트리 구조 및 파일 시스템 탐색 구현
- 고급 데이터 바인딩 및 명령 패턴 활용
- .NET 8.0
- WPF (Windows Presentation Foundation)
- Jamesnet.Wpf
- Prism
- CommunityToolkit.Mvvm
git clone https://github.com/jamesnet214/wpf-explorer.git
"WPF INSIDE OUT"은 WPF의 고급 기능과 실용적인 적용 방법을 상세히 다루는 종합 안내서입니다. WPF Explorer 프로젝트를 통해 이 책은 실제 애플리케이션 개발 과정을 단계별로 설명하며, 독자들에게 실용적인 WPF 개발 경험을 제공합니다.
- OVERVIEW
- 1.1 학습의 철학과 방향성에 대해
- 1.2 디자인 요소의 활용과 이해
- 1.3 (CustomControl) 의 전문적인 활용
- 1.4 GitHub 레포지터리
- 1.5 외부 라이브러리와 종속성 관계
- 1.6 .NET 버전 선택의 중요성
- 1.7 프로젝트 구성
- 1.8 (Project Overview) 섹션의 마무리
- Application
- 2.1 프로젝트 네이밍
- 2.2 새 프로젝트 만들기 (WpfExplorer)
- 2.3 버전 선택 및 프로젝트 만들기
- 2.4 기본 구성 파일 제거
- 2.5 라이브러리와 종속성
- 2.6 App 구현
- 2.7 Starter 구현
- 2.8 (Application) 섹션의 마무리
- DarkWindow
- 3.1 프로젝트 네이밍
- 3.2 프로젝트 만들기 (WpfExplorer.Support)
- 3.3 Generic.xaml 관리
- 3.4 AssemblyInfo.cs 파일과 CustomControl 관계
- 3.5 사용자 지정 컨트롤 (CustomControl) 생성
- 3.6 리소스 사전 (ResourceDictionary) 생성
- 3.7 윈도우 버튼 구현
- 3.8 CloseButton 구현
- 3.9 MaximizeButton 구현
- 3.10 MinimizeButton 구현
- 3.11 Generic.xaml 리소스 파일 병합
- 3.12 DarkWindow 구현
- 3.13 DarkWindow 실행
- 3.14 (Darkwindow) 섹션의 마무리
- Multiple ItemsControl
- 4.1 TreeView 구현
- 4.2 FolderTreeView 구현
- 4.3 뷰에서 FolderTreeView 추가
- 4.4 FolderTreeItem 구현
- 4.5 ResourceDictionary의 병합
- 4.6 실행: FolderTreeItem 테스트
- 4.7 TreeViewItem 컨트롤 대체하기
- 4.8 MVVM: 뷰모델 구현하기
- 4.9 바인딩: TestTitle
- 4.10 DataContext 할당하기
- 4.11 실행: ViewModel 바인딩 테스트
- 4.12 임시 속성 제거하기
- 4.13 또 다른 바인딩 테스트 방법
- 4.14 모델 클래스 생성
- 4.15 DirectoryManager 클래스 생성 (Helper)
- 4.16 Prism에 대한 간략한 소개
- 4.17 싱글턴 객체 등록하기
- 4.18 ViewModel 등록 관리
- 4.19 의존성 주입
- 4.20 (Multiple ItemsControl) 섹션의 마무리
- MainContent
- 5.1 WpfExplorer.Main
- 5.2 MainContent 등록
- 5.3 객체 설계에 대한 주의 사항 (의존성 주입)
- 5.4 ExplorerWindow 구조 변경
- 5.5 MainContent 의존성 주입
- 5.6 실행: MainContent 테스트
- 5.7 FolderTreeView 관련 파일 프로젝트 이동
- 5.8 윈도우 디렉터리 구조 만들기
- 5.9 MainContent 뷰모델 구현
- 5.10 MainContet 뷰 구현
- 5.11 ItemsControl: 자식 요소의 객체 지정
- 5.12 뷰모델에서 이벤트를 구현하는 방법
- 5.13 TreeView 이벤트 바인딩
- 5.14 SelectionCommand 연결
- 5.15 실행: SelectionCommand 테스트
- 5.16 좀 더 간소화된 ICommand 만들기
- 5.17 TreeView 계층 구조
- 5.18 TreeViewItem 자식 연결
- 5.19 GetContainerForItem 재정의
- 5.20 계층 표현: DepthConverter
- 5.21 트리 하위 자식 보이기/숨기기 (IsExpanded)
- 5.22 ExpandButton 구현 (ToggleButton)
- 5.23 TreeView 최종 리소스 구현
- 5.24 (MainContent) 세션의 마무리
- NavigatorService
- 6.1 싱글턴 인스턴스 구현
- 6.2 의존성 주입: NavigatorService 구현
- 6.3 파일 목록 바인딩
- 6.4 FileListBox 구현
- 6.5 상세 파일 목록 만들기
- 6.6 PolygonSelector 구현
- 6.7 (NavigatorService) 섹션의 마무리
- LocationContent
- 7.1 WpfExplorer.Location
- 7.2 LocationContent 뷰 모듈화
- 7.3 LocatorButton 구현
- 7.4 LocatorTextBox 구현
- 7.5 Generic.xaml 병합하기
- 7.6 LocationContent 뷰 고도화
- 7.7 LocatorTextBox 현재 위치 연결
- 7.8 DarkWindow 고도화
- 7.9 (LocationContent) 섹션의 마무리
- Advancement
- 8.1 DarkScrollViewer 고도화
- 8.2 FolderTreeView 초기 설정하기
- 8.3 접근 불가능한 디렉터리의 표현
- 8.4 (LocationContent) 섹션의 마무리
이 프로젝트에 기여하고 싶으시다면 풀 리퀘스트를 보내주세요. 모든 기여를 환영합니다!
이 프로젝트는 MIT 라이선스 하에 있습니다. 자세한 내용은 LICENSE 파일을 참조하세요.