문제

작은 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 자원을 위해

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