2

내부의 제어 선물을 액세스하는 방법 :나는 다음과 같은 데이터 템플릿 안에 몇 TextBlock을 가지고 DataTemplate을

<DataTemplate> 
    <StackPanel x:Name="stackPanelItems" Orientation="Horizontal"> 
     <TextBlock x:Name="myTextBox" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="14" /> 
    </StackPanel> 
    </DataTemplate> 

이제 우리는 일부 시나리오에 myTextBox Collsapsed을해야하지만로드를 사용하거나 클릭합니다 해달라고을 이벤트를 입력 한 다음 sender을 통해 컨트롤에 액세스하십시오.

다른 방법이나 방법을 사용할 수 있습니까?

감사합니다,

Subhen

+0

시나리오는 무엇입니까? – slugster

+0

@ Slugster, 데이터 템플릿 안에 4 개의 다른 텍스트 상자가 있고 다른 버튼 클릭에서 Visibiliti 옵션을 바꾸고 싶습니다. – Simsons

+1

귀하의 질문대로 이해가되지 않습니다. myTextBox라는 텍스트 블록을 축소하려면 축소 된 속성 인 yo를 변경하십시오. 이름을 지은 이후에 참조가 있습니다. 이 작업은 코드에서 수행 할 수 있습니다. –

답변

2

은 불행하게도, 명명 된 객체를 접근으로이 같은 간단한 작업을 수행하는 방법이 있습니다. 바인딩을 사용하여이 데이터 템플릿을 채우고 있다고 가정하면 부모 컨트롤의 자식 개체를 반복하고 알려진 값과 비교하여 텍스트 필드를 확인하는 옵션이 있습니다. 약간의 클리너는 Tag 속성 (모든 객체에 바인딩 될 수 있음)을 사용하여 비교할 수 있습니다.

또 다른 옵션 (가장 자주 사용하는 옵션)은 바인딩하려는 개체에 속성을 추가하고 해당 속성을 가시성에 바인딩하는 것입니다 (필요한 경우 변환기 사용). 당신이 현재 ObservableCollection에 < 문자열>에 결합하는 경우 예를 들어, StringWithVisibility이 보이는 ObservableCollection에 < StringWithVisibility> 바인딩을 변경 같은 :

public class StringWithVisibility 
{ 
    public string Text {get; set;} 
    public bool IsVisible {get; set;} 
} 

그리고 템플릿 보이는 같은 :

<DataTemplate> 
    <StackPanel x:Name="stackPanelItems" Orientation="Horizontal"> 
     <TextBlock Text="{Binding Text}" Visibility={Binding IsVisible, Converter={StaticResource BoolVisibilityConverter}} /> 
    </StackPanel> 
</DataTemplate> 

그리고 적절한 IValueConverter를 리소스로 생성했습니다. 당신이 컨버터에 익숙하지 않은 경우, 워드 프로세서 현재 위치 : http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter(VS.95).aspx

1

를 컨버터는 가장 좋은 방법이지만, 귀하의 질문에 대답하기 위해, 당신은 뒤에 코드에서 이런 식으로 컨트롤에 액세스 할 수 있습니다

TextBox myTextbox = GetTemplateChild("myTextbox") as Textbox; 
if (myTextbox != null) 
{ 
    // do something 
} 
+0

죄송하지만,이 작동하지 않습니다 .. –

+0

당신이 대답 할 수 : http://stackoverflow.com/questions/16727854/how-to-find-a-control-that-is-inside-datatemplate-assign -value-in-wpf/16728718? noredirect = 1 # 16728718 –