Windows Explorer 클론에서 MVVM, 사용자 정의 컨트롤, 현대적인 UI/UX 디자인을 포함한 고급 WPF 기술을 선보입니다.
WPF Explorer는 "WPF INSIDE OUT" 책의 핵심 예제 프로젝트로, WPF(Windows Presentation Foundation)의 고급 기능을 탐구하고 실습하기 위해 설계되었습니다. 이 프로젝트는 WPF를 사용하여 Windows Explorer의 기능을 복제하며, MVVM 아키텍처, 의존성 주입, 사용자 정의 컨트롤, 고급 스타일링 기법 등 다양한 고급 WPF 기술을 적용합니다.
![](https://private-user-images.githubusercontent.com/52397976/355528097-a7b9c310-6b2b-4268-bc50-ba56cccb383c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMjc5MjMsIm5iZiI6MTczOTAyNzYyMywicGF0aCI6Ii81MjM5Nzk3Ni8zNTU1MjgwOTctYTdiOWMzMTAtNmIyYi00MjY4LWJjNTAtYmE1NmNjY2IzODNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE1MTM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZkOTVmNmFiYjM1MzcwNGFlMTgwOTUzYTU1MDkxNGJiY2U1YmJjYzQzNjIyMWM2YzFmYzllZGYwNTBlMjBhNTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.6_qVkqNt1agXb8Zha_pxe4l_oOAd8rExUx8lpaW3RUE)
![](https://private-user-images.githubusercontent.com/52397976/355522520-8e547f5a-762b-43de-81c7-f6f816c9190d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMjc5MjMsIm5iZiI6MTczOTAyNzYyMywicGF0aCI6Ii81MjM5Nzk3Ni8zNTU1MjI1MjAtOGU1NDdmNWEtNzYyYi00M2RlLTgxYzctZjZmODE2YzkxOTBkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE1MTM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBmZmMwMjg5NzhhYjQyODgyYTc5MjBjYTk1NTBjZjRmNDZmZWRkYzc5YjQ1MDU2ODhlNzY1MjA1ZDdkNTQ3MWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.zB964HxNZJEkHBO9YvtSbAnRsK3SVx7Xj0JvLCcrt9A)
이 프로젝트를 통해 개발자들은 다음과 같은 실용적인 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
![](https://private-user-images.githubusercontent.com/52397976/354799051-af70f422-7057-4e77-a54d-042ee8358d2a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMjc5MjMsIm5iZiI6MTczOTAyNzYyMywicGF0aCI6Ii81MjM5Nzk3Ni8zNTQ3OTkwNTEtYWY3MGY0MjItNzA1Ny00ZTc3LWE1NGQtMDQyZWU4MzU4ZDJhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE1MTM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNhYWY3MmM2NzRlMGI5OTZmYWNlMzYyMTgzYTQxZmU3OGFhYzcwMzZjMjIyMDgzYTI0YWU1ZTg4Nzg5NTRlOTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.2M3GjdNVUe32y7fGXRyfVds9pMiqSNGzXDx7YXCTqhw)
![](https://private-user-images.githubusercontent.com/52397976/354799195-e4feaa10-a107-4b58-8d13-1d8be620ec62.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMjc5MjMsIm5iZiI6MTczOTAyNzYyMywicGF0aCI6Ii81MjM5Nzk3Ni8zNTQ3OTkxOTUtZTRmZWFhMTAtYTEwNy00YjU4LThkMTMtMWQ4YmU2MjBlYzYyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE1MTM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZjYWUyMThiYmQyODJjOGU1MzkyYzk0NzA4NTczMTNmN2VmYzc5YzAxOWEwYTVlYjllOWNkMzk1ODBmNzNhMjcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Bzl0e1gVQ4VohkFAs6ifipqYHlRhnpuAm_OZ3z-nTuY)
![](https://private-user-images.githubusercontent.com/52397976/354799464-5ff487f6-55e4-43e1-9abf-f8d419ee6943.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMjc5MjMsIm5iZiI6MTczOTAyNzYyMywicGF0aCI6Ii81MjM5Nzk3Ni8zNTQ3OTk0NjQtNWZmNDg3ZjYtNTVlNC00M2UxLTlhYmYtZjhkNDE5ZWU2OTQzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE1MTM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ4ZWE4YzRlOWZjODM4NGE0ZjJjMzZhMmFiZTM2MzNiMzkxZWEwNDZiNTRjOGMxNmE5YWRjNDJkZjI1MDIwYTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ZiijRK_Xs0se6eWPbM-kHBuEPK-REiBT4Zl5bDIpcco)
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) 섹션의 마무리
![](https://private-user-images.githubusercontent.com/52397976/355522520-8e547f5a-762b-43de-81c7-f6f816c9190d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMjc5MjMsIm5iZiI6MTczOTAyNzYyMywicGF0aCI6Ii81MjM5Nzk3Ni8zNTU1MjI1MjAtOGU1NDdmNWEtNzYyYi00M2RlLTgxYzctZjZmODE2YzkxOTBkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE1MTM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBmZmMwMjg5NzhhYjQyODgyYTc5MjBjYTk1NTBjZjRmNDZmZWRkYzc5YjQ1MDU2ODhlNzY1MjA1ZDdkNTQ3MWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.zB964HxNZJEkHBO9YvtSbAnRsK3SVx7Xj0JvLCcrt9A)
![](https://private-user-images.githubusercontent.com/52397976/355523356-77f1fd54-66f2-46dc-91a2-977d5956c305.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMjc5MjMsIm5iZiI6MTczOTAyNzYyMywicGF0aCI6Ii81MjM5Nzk3Ni8zNTU1MjMzNTYtNzdmMWZkNTQtNjZmMi00NmRjLTkxYTItOTc3ZDU5NTZjMzA1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE1MTM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU3M2JmNjRjOWFhNDQ5NjI5YzJjM2RmMWEzMGZmODQ2M2RiZGU3NTRkMjVhMjVhM2U2MjgxNmIwMmYyOWFkY2YmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.3Q0ZiJgvnfqbHEJdlttVW-SydXtkPFkILMYyQ8xnJd0)
이 프로젝트에 기여하고 싶으시다면 풀 리퀘스트를 보내주세요. 모든 기여를 환영합니다!
이 프로젝트는 MIT 라이선스 하에 있습니다. 자세한 내용은 LICENSE 파일을 참조하세요.
- 웹사이트: https://jamesnet.dev
- 이메일: [email protected], [email protected]