2015-02-04 7 views
0

FindName이 작동하지 않습니다. 값은 null입니다.
그리고 호출 할 수 없습니다 내에서 x:Name="QuantiteTextBox" 내 코드 숨김 ...
이름은 .. 이런 맥락에서 존재하지 않는 것 같다FindName이 작동하지 않습니다.

XAML :

<GridViewColumn Width="Auto" Header="Nb"> 
    <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <TextBox x:Name="QuantiteTextBox" Text="{Binding Quantite, ElementName=EditTableUserControl}" HorizontalAlignment="Center" Margin="-10,0,0,0"/> 
      </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

WPF :

var quantiteTextBox = (TextBox)FindName("QuantiteTextBox"); 

어떻게이 문제를 해결할 수 있습니까? 감사.

+1

올바른 창에서 FindName을 사용하고 있습니까? – AgentFire

+0

해결 방법 : http://stackoverflow.com/questions/636383/how-can-i-find-wpf-controls-by-name-or-type/1759923#1759923 FindName의 대안. – C0ZEN

답변

1

TextBox가 템플릿에 있기 때문에 FindName이 작동하지 않습니다. 그 <TextBox> 선언 실제로 "QuantiteTextBox"라는 TextBox를 만들지 않습니다. 대신 GridViewColumn은 해당 TextBox를 템플릿으로 사용하여 더 많은 TextBox를 만듭니다. GridViewColumn이 GridView에 10 개의 행이있는 경우를 상상해보십시오. 10 개의 TextBox 인스턴스가 생성 될 수 있으므로 그 이름을 가진 단일 TextBox는 없습니다.

FindName을 호출하면 특정 범위를 쿼리합니다. 게시 한 코드가 WPF 창 내부에 있으면 해당 창 내부의 컨트롤 만 찾습니다. 해당 TextBox가 창에 없기 때문에 찾을 수 없습니다.

이 시점에서, 당신이 Window에서 TextBox 중 하나를 찾으려고했는지, 아니면 실제로 컨트롤 템플릿에 TextBox를 원한다면 나는 모른다. 보십시오

내가 줄 수있는 것보다 더 나은 설명을 보려면 Why doesnt Window.FindName() discover the x:Name of a button in a child UserControl? AKA how do NameScopes work?을 참조하십시오. 간단히 말해서 : 당신은 아마 이것을 다른 방법으로하고 싶을 것입니다.