InitializeComponent ()의 기능은 무엇이며 WPF에서 어떻게 작동합니까?
InitializeComponent()
WPF에서 어떤 기능을 수행하며 어떻게 작동합니까?
일반적으로 먼저, 나는 건설 순서에 대한 까다로운 세부 사항과 부착 된 속성이있을 때 발생하는 일에 대해 특히 관심이 있습니다.
에 대한 호출 InitializeComponent()
(보통 적어도 Window
and 의 기본 생성자에서 UserControl
호출 됨)은 실제로 컨트롤의 부분 클래스에 대한 메서드 호출입니다 (처음에 예상 한대로 객체 계층을 호출하는 것이 아니라).
이 메서드 는로드 중인 Window
/ 에 대한 XAML에 대한 URI를 찾아 정적 메서드에 UserControl
전달합니다 System.Windows.Application.LoadComponent()
. LoadComponent()
전달 된 URI에있는 XAML 파일을로드하고 XAML 파일의 루트 요소로 지정된 객체의 인스턴스로 변환합니다.
보다 자세하게 LoadComponent
는의 인스턴스를 만들고 XamlParser
XAML의 트리를 만듭니다. 각 노드는로 구문 분석됩니다 XamlParser.ProcessXamlNode()
. 이것은 BamlRecordWriter
수업에 전달됩니다 . 얼마 후 BAML이 객체로 변환되는 방식에서 약간의 손실이 발생하지만 이것은 깨달음의 길을 찾는 데 도움이 될 수 있습니다.
참고 : 흥미롭게도 인터페이스 InitializeComponent
의 메소드 는 부분 생성 클래스에서 / 구현됩니다.System.Windows.Markup.IComponentConnector
Window
UserControl
도움이 되었기를 바랍니다!
코드를 보면 항상 도움이됩니다. 즉, 실제로 다음을 수행하여 생성 된 부분 클래스 ( LoadComponent 호출 )를 볼 수 있습니다 .
- 관심있는 Visual Studio 솔루션의 솔루션 탐색기 창으로 이동하십시오.
- 솔루션 탐색기의 도구 모음에는 '모든 파일 표시'라는 단추가 있습니다. 그 버튼을 토글하십시오.
- 이제 obj 폴더를 확장 한 다음 Debug 또는 Release 폴더 (또는 구성하는 모든 구성)를 확장하면 YourClass .g.cs 라는 파일이 표시됩니다 .
YourClass의 .g.cs ... 생성 된 부분 클래스의 코드입니다. 다시 한 번 열어 보면 InitializeComponent 메소드와 LoadComponent 호출 방법 등을 볼 수 있습니다.
'IT박스' 카테고리의 다른 글
PreferenceFragment가 호환성 패키지에서 의도적으로 제외 되었습니까? (0) | 2020.06.08 |
---|---|
Git의 하위 디렉토리를 확인 하시겠습니까? (0) | 2020.06.08 |
UIButton의 배경 이미지로 사용할 UIColor에서 UIImage 만들기 (0) | 2020.06.08 |
SVN : 파일을 "커밋하지 않음"으로 표시하는 방법이 있습니까? (0) | 2020.06.08 |
iOS 5와 하위 호환성을 유지하면서 iOS 6에서 자동 레이아웃 활성화 (0) | 2020.06.08 |