문제

무엇을 하는가 InitializeComponent() WPF에서 어떻게 작동합니까?

일반적으로 먼저, 특히 건설 순서의 끔찍한 세부 사항과 첨부 된 속성이있을 때 발생하는 일을 특히 알고 싶습니다.

도움이 되었습니까?

해결책

전화 InitializeComponent() (일반적으로 적어도 기본 생성자로 호출됩니다. Window 그리고 UserControl)는 실제로 컨트롤의 부분 클래스에 대한 메소드 호출입니다 (내가 처음 예상했던대로 객체 계층 구조를 호출하지 않고).

이 방법은 XAML에 URI를 찾습니다. Window/UserControl 그것은 로딩되고 있으며 그것을 전달합니다 System.Windows.Application.LoadComponent() 정적 방법. LoadComponent() URI로 전달 된 XAML 파일을로드하고 XAML 파일의 루트 요소로 지정된 객체의 인스턴스로 변환합니다.

더 자세하게, LoadComponent 인스턴스를 만듭니다 XamlParser, XAML의 나무를 만듭니다. 각 노드는 XamlParser.ProcessXamlNode(). 이것은 전달됩니다 BamlRecordWriter 수업. 이 후 얼마 후 나는 BAML이 물체로 변환되는 방식에서 약간 길을 잃었지만, 이것은 깨달음으로가는 길에 도움이 될 수 있습니다.

참고 : 흥미롭게도 InitializeComponent 에 대한 메소드입니다 System.Windows.Markup.IComponentConnector 인터페이스 Window/UserControl 부분 생성 클래스에서 구현하십시오.

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

다른 팁

코드를 보는 것도 항상 도움이됩니다. 즉, 실제로 생성 된 부분 클래스를 볼 수 있습니다 (전화 loadcomponent) 다음을 수행함으로써 :

  1. 관심있는 Visual Studio 솔루션의 솔루션 탐색기 창으로 이동하십시오.
  2. 솔루션 탐색기의 도구 표시 줄에는 '모든 파일 표시'라는 버튼이 있습니다. 해당 버튼을 전환하십시오.
  3. 이제 확장하십시오 obj 폴더와 그 다음 디버그 또는 풀어 주다 폴더 (또는 건축중인 구성) 및 제목의 파일이 표시됩니다. 당신의 클래스.g.cs.

그만큼 당신의 클래스.g.cs ...은 생성 된 부분 클래스의 코드입니다. 다시 말하지만,이를 열면 InitializeComponent 메소드와 LoadComponent를 호출하는 방법을 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top