XAML의 정적 RES로 선언 된 사용자 정의 OBJ를 참조하는 것은 NULL입니다. 왜요?
-
20-09-2019 - |
문제
작은 Silverlight 3 테스트 응용 프로그램이 있습니다. 이것은 Silverlight, XAML, 바인딩 등을 배우는 운동입니다. 나는 세 가지 속성이있는 작은 테스트 클래스 (테스트)가 있습니다. Val1, Val2 및 합. XAML의 리소스를 다음과 같이 선언했습니다.
<UserControl.Resources>
<app:Test x:Name="xamlTestObj"></app:Test>
</UserControl.Resources>
사용자 컨트롤에 버튼이 있습니다. 이 버튼의 뒤에있는 코드는 다음과 같습니다.
xamlTestObj.Val1 += 100;
xamlTestObj.Val2 += 300;
솔루션은 성공적으로 구축되지만 실행하면 xamltestobj를 참조 할 때 버튼 핸들러에서 NullReferenceException을 얻습니다. 사용자 컨트롤 리소스 목록에서 객체를 꺼내면 버튼 클릭을 성공적으로 실행할 수있었습니다. 처럼:
Test xamlTestObj = (Test)Resources["xamlTestObj"];
xamlTestObj.Val1 += 100;
xamlTestObj.Val2 += 300;
나를 혼란스럽게하는 것은 자원 목록에서 객체를 꺼내야하는 이유입니다. 컴파일러가 XamlTestObj 참조를 볼 수 있다면 (이 경우, 사용자 컨트롤)에서 선언 된 범위의 수명에 대해 "라이브"가되어야한다는 것 같습니다. WPF 컨트롤은 이런 식으로 행동합니다. 즉, 사용자 컨트롤에 놓인 텍스트 상자와 버튼에 액세스 할 수 있습니다.
누구든지 나를 위해 이것을 정리할 수 있습니까?
감사 :-)
해결책
내가 아는 한, 시각적 트리의 요소만이 해당 필드에로드됩니다. InitializeComponents
방법. 리소스는 시각적 트리의 일부가 아니며 필요할 때만로드되므로 해당 필드는 널 유지됩니다.
그건 그렇고, 당신은 사용해야합니다 x:Key
보다는 x:Name
자원을 위해
제휴하지 않습니다 StackOverflow