InitializeComponent ()의 기능은 무엇이며 WPF에서 어떻게 작동합니까? 작동합니까? 일반적으로 먼저, 나는 특히 건설 순서에

InitializeComponent()WPF에서 어떤 기능을 수행하며 어떻게 작동합니까?

일반적으로 먼저, 나는 특히 건설 순서에 대한 까다로운 세부 사항과 부착 된 속성이있을 때 어떻게되는지 알고 싶습니다.



답변

에 대한 호출 InitializeComponent()(보통 적어도 Windowand 의 기본 생성자에서 UserControl호출 됨)은 실제로 컨트롤의 부분 클래스에 대한 메서드 호출입니다 (처음에 예상 한대로 객체 계층을 호출하는 것이 아니라).

이 메서드 는로드 중인 Window/ 에 대한 XAML에 대한 URI를 찾아 정적 메서드에 UserControl전달합니다 System.Windows.Application.LoadComponent().LoadComponent()전달 된 URI에있는 XAML 파일을로드하고 XAML 파일의 루트 요소에 의해 지정된 객체의 인스턴스로 변환합니다.

보다 자세하게 LoadComponent는의 인스턴스를 만들고 XamlParserXAML의 트리를 만듭니다. 각 노드는로 구문 분석됩니다 XamlParser.ProcessXamlNode(). 이것은 BamlRecordWriter수업에 전달됩니다 . 얼마 후 BAML이 객체로 변환되는 방식에서 약간의 손실이 발생하지만 이것은 깨달음의 길을 찾는 데 도움이 될 수 있습니다.

참고 : 흥미롭게도 인터페이스 InitializeComponent의 메소드 는 부분 생성 클래스에서 / 구현됩니다.System.Windows.Markup.IComponentConnectorWindowUserControl

도움이 되었기를 바랍니다!


답변

코드를 보면 항상 도움이됩니다. 즉, 실제로 다음을 수행하여 생성 된 부분 클래스 ( LoadComponent 호출 )를 볼 수 있습니다 .

  1. 관심있는 Visual Studio 솔루션의 솔루션 탐색기 창으로 이동하십시오.
  2. 솔루션 탐색기의 도구 모음에는 ‘모든 파일 표시’라는 단추가 있습니다. 그 버튼을 토글하십시오.
  3. 이제 obj 폴더를 확장 한 다음 Debug 또는 Release 폴더 (또는 작성중인 구성)를 확장하면 YourClass .g.cs 라는 파일이 표시됩니다 .

YourClass의 .g.cs … 생성 된 부분 클래스의 코드입니다. 다시 한 번 열어 보면 InitializeComponent 메소드와 LoadComponent 호출 방법 등을 볼 수 있습니다.