2009-10-05 6 views
7

ControlTemplate 섹션을 포함하는 스타일로 버튼에 스타일을 적용하는 사용자 정의 컨트롤이 있습니다. ControlTemplate 내에는 Ellipse 및 Path와 같은 다양한 UI 요소가 있습니다.WPF는 코드 숨김 된 스타일 요소를 설정합니까?

타원과 경로의 요소에 x : Name이라는 이름을 지정하면 코드 숨김에서 해당 요소에 액세스 할 수 있습니까?

컴파일 오류 (C#)가 발생하기 때문에 스타일의 타원 및 패스가 보이지 않습니다.

내가 잘못 생각하고 있습니까?

답변

18

템플릿을 여러 번 인스턴스화 할 수 있으므로 x:Name을 통해 생성 된 멤버를 바인딩 할 수 없습니다. 대신 템플릿에있는 컨트롤에 적용된 명명 된 요소를 찾아야합니다.

을 감안할 때 단순 XAML은 :

<ControlTemplate x:Key="MyTemplate"> 
    <Ellipse x:Name="MyEllipse" /> 
</ControlTemplate> 

당신이 뭔가를 할 것이다 : 더 간단하게

var template = (ControlTemplate)FindResource("MyTemplate"); 

template.FindName("MyEllipse", myControl); 

또는를 :

var ellipse = (Ellipse)myControl.Template.FindName("MyEllipse", myControl); 

당신은 약 FrameworkTemplate.FindName를 읽을 수 있습니다.

일부 예제와 토론 here, herehere.

+0

완벽한, 고마워요! – MattJ

+11

완벽하면 답으로 표시하십시오. – Vaccano