2015-02-04 205 views
0

我的FindName不起作用,值爲空。
我不敢說我​​的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

FindName將無法工作,因爲TextBox位於模板中。 <TextBox>聲明實際上並未創建名爲「QuantiteTextBox」的文本框。相反,GridViewColumn使用該文本框作爲模板來創建更多的文本框。試想一下,如果該GridViewColumn在10行的GridView中。您可能會獲得10個TextBox實例,因此沒有單個文本框具有該名稱。

當您調用FindName時,它會查詢某個作用域。如果您發佈的代碼正好在WPF窗口中,那麼它只會在該窗口內查找控件。由於TextBox不在窗口中,因此您不會找到它。

在這一點上,我不知道你是否打算在窗口中找到一個文本框,或者如果你真的想要在控制模板中的文本框。看看t

請參閱Why doesnt Window.FindName() discover the x:Name of a button in a child UserControl? AKA how do NameScopes work?以獲得比我更好的解釋。簡而言之:您可能想以另一種方式做到這一點。