작은 Silverlight 3 테스트 응용 프로그램이 있습니다. Silverlight, XAML, 바인딩 등을 배우는 연습입니다. 세 가지 속성이있는 작은 테스트 클래스 (Test)가 있습니다. Val1, Val2 및 Sum. 다음과 같이 XAML의 리소스를 선언했습니다.xaml에서 정적 res로 선언 된 사용자 정의 obj를 참조하는 것은 null입니다. 왜?
<UserControl.Resources>
<app:Test x:Name="xamlTestObj"></app:Test>
</UserControl.Resources>
나는 사용자 정의 컨트롤에 단추가 있습니다. 이 솔루션을 성공적으로 구축,하지만 난 그것을 실행할 때 xamlTestObj를 참조 할 때 내가 단추 처리기에서 NullReferenceException이 얻을
xamlTestObj.Val1 += 100;
xamlTestObj.Val2 += 300;
:이 버튼 뒤에 코드처럼 보인다. 사용자 컨트롤의 리소스 목록에서 개체를 꺼낸 경우 성공적으로 단추를 클릭 할 수있었습니다. Like :
Test xamlTestObj = (Test)Resources["xamlTestObj"];
xamlTestObj.Val1 += 100;
xamlTestObj.Val2 += 300;
나를 혼란스럽게하는 이유는 리소스 목록에서 개체를 꺼내야하는 이유입니다. 컴파일러가 xamlTestObj 참조를 볼 수 있다면 그것이 선언 된 범위의 수명 동안 (이 경우 사용자 정의 컨트롤에서) "실행"되어야한다는 것입니다. WPF 컨트롤은 이러한 방식으로 작동합니다. 즉, 사용자 정의 컨트롤에 배치 한 모든 텍스트 상자 및 단추에 액세스 할 수 있습니다.
누구나 나를 위해 이것을 정리할 수 있습니까?
가 UserControl.Resources에 선언 된 사용자들은 물건이 this.Resources 통해서만 액세스 [ "SomeResource"] 인덱서 xamlTestObj 속성을 표시하는 유일한 이유는 ax : Name을 지정했기 때문입니다.하지만 xaml은 생성자의 InitializeComponents()가 호출 될 때 콘텐츠 영역 () 내에있는 요소 만로드합니다. 리소스는 내용 영역의 일부가 아닙니다 그러므로 당신의 행동 –
Neil