2010-12-31 6 views
3

ContentPropertyAttribute를 사용하여 하위 패널 중 하나의 하위 속성을 노출하는 Silverlight UserControl이 있습니다. 이것은 내 페이지의 패널에 자식 컨트롤을 추가 할 수 있습니다 :UserControl 하위 컨트롤 및 FindName

<local:MyUserControl> 
    <TextBox Name="tbTest" /> 
</local:MyUserControl> 

이 따로 존재하는 페이지의 'tbTest'필드에서 작동하지만 초기화. 정밀 검사에서 InitializeComponent 메서드는 FindName을 사용하여 TextBox를 찾지 만 null을 반환하지는 않습니다.

약간의 조사가 끝나면 네임 스코프가 문제가되는 것으로 밝혀졌습니다. UserControl은 자체 이름 범위를 가지므로 페이지의 FindName은 찾을 수 없지만 UserControl의 FindName 메서드를 사용하면 찾을 수 있습니다.

어떻게 내 자식 컨트롤을 InitializeComponent 메서드에서 찾을 수 있도록 내 UserControl을 변경할 수 있습니까? 표준 패널 (StackPanel, Grid, 등)은 아무런 문제가없는 것처럼 보이므로 솔루션이 있어야합니까? 그것은 어려울 수 있습니다

감사

답변

1

이 시점에서해야 할 일이지만 최선의 조치는 아마도 ItemsControl에 대신 UserControl에서 컨트롤을 유도하는 것입니다. 그렇다면 네임 스코프에 문제가 없을 것입니다.

해결 방법으로 수동으로 tbTest 필드를 설정하기 위해 VisualTreeHelper를 사용하여 컨트롤을 다이빙 할 수 있다고 가정합니다.

+0

나는 이것이 필요하다는 것에 놀랐지 만, 나는 그것을 시도 할 것이다. 표준 패널을 매우 특별하게 만드는 이유는이 문제를 해결하기 위해서입니다. 아마 이것들 중 하나에서 파생 될 수 있습니까? – Barguast

+0

그 패널에 특별한 것은 없지만 특별한 UserControl입니다. 컨테이너 컨트롤로 사용하도록 설계되지는 않았지만 ContentPropertyAttribute를 사용하여 일종의 작업으로 만들 수있는 방법을 발견했습니다. 클래스가 패널이라면 확실히 Panel에서 파생 될 수 있습니다. 그러나 설명했던 것에서 ItemsControl이 더 적절한 것으로 보이므로이를 제안했습니다. – Josh