2011-01-24 13 views
5

다음과 같이 GetTemplateChild를 사용하지만 항상 NULL을 반환합니다. 이 문제를 해결하는 방법?GetTemplateChild는 항상 null을 반환합니다.

[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))] 
textPoints = (TextBlock)GetTemplateChild("TextBlock"); 
+0

해결 방법을 찾으셨습니까? _Reed Copsey_의 대답은 제공하신 정보에 맞지만 여전히 작동하지 않는다면 오류가 포함될 수있는 컨트롤 템플릿을 게시 할 수 있습니다. –

+1

제 경험상,'FrameworkElement.OnApplyTemplate()'이 호출되기 전에'FrameworkElement.GetTemplateChild()'를 호출하는 것은 안전하지 않습니다. 컨트롤을 서브 클래스 화하고'OnApplyTemplate()'을 오버라이드 (override) 해보십시오. – kevinarpe

답변

4

GetTemplateChild는 파라미터가 아닌 형태로 이름 걸린다. 당신의 XAML는 다음과 같이 정의되어 있기 때문에 :

<TextBlock Text="{Binding}" Foreground="Cyan" 
    x:Name="textPoints" 

은 검색 할 이름으로 "TextBlock" 대신 "textPoints"을 전달하십시오 : 당신이 어디를에서 다른 컨트롤의 템플릿 아이를 얻기 위해 노력하고있다처럼

[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))] 
textPoints = (TextBlock)GetTemplateChild("textPoints"); 
+0

Thnaks, 아래 코드로 시도했지만 동일한 결과 (예 : NULL)를 얻습니다. textPoints = (TextBlock) GetTemplateChild ("textPoints"); 나는 숱이 없는가? – codematrix

+0

아니요, 아래 메서드에서 Public override void OnApplyTemplate(). 다른 GetTemplateChilds가 작동 중입니다. 이 TextBlock에만 문제가 있습니다. 의 일부입니다. 이 경우 GetTemplateChild()가 작동합니까? – codematrix

2

가 보이는 GetTemplateChild를 호출하고 있습니까?

ItemsControl이 UserControl 안에 있으면 GetControlChild는 UserControl의 자식이 템플릿 자식이 아니며 모든 자식의 템플릿 자식을 재귀 적으로 검색하지 않으므로 GetTemplateChild가 작동하지 않습니다.

대부분 GetTemplateChild는 사용자 지정 컨트롤에서 사용됩니다.

+0

위의 코드를 보면 x : Name = "PointsList"이지만 x : Name = "textPoints"가 아닌 x : Name에서 작동합니다. 약간의 빛을 던질 수 있습니까? 이 경우 GetTemplateChild()가 작동합니까? – codematrix

+0

GetTemplateChild는 현재 템플릿에서 이름이 지정된 자식 만 찾습니다. 텍스트 상자는 currny 템플릿 안에 있지 않으므로 템플릿의 자식 템플릿 안에 있습니다. ItemsControl에서 파생 된 다른 사용자 정의 컨트롤을 만들어야하지만, 컨트롤이 항목 템플릿 안에 있으면 별도의 사용자 정의 컨트롤로 항목 컨테이너를 만들어야합니다. –

+0

템플릿 하위는 현재 제어를위한 개인 요소의 일종이며 부모 소유 템플릿 만 템플릿 하위에 액세스 할 수 있지만 VisualTree를 탐색하고 어디에서나 자식 컨트롤에 도달 할 수 있습니다. 또한 ItemsControl에는 모든 항목에 대해 동일한 이름을 가진 많은 컨트롤이 있으므로 GetTemplateChild는 어떤 항목을 반환합니까? –

관련 문제