FindName不起作用

时间:2015-02-04 21:07:13

标签: c# wpf xaml datatemplate findname

我的FindName不起作用,值为空 我无法在我的代码隐藏中调用x:Name="QuantiteTextBox" ... 这个名称似乎不存在于此背景下。

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 个答案:

答案 0 :(得分:1)

FindName不起作用,因为TextBox在模板中。 &lt; TextBox&gt;声明实际上并没有创建名为“QuantiteTextBox”的TextBox。相反,GridViewColumn使用TextBox作为模板来创建更多TextBoxes。想象一下,如果GridViewColumn位于包含10行的GridView中。您可能会获得10个TextBox实例,因此没有一个具有该名称的TextBox。

当您调用FindName时,它会查询某个范围。如果您发布的代码正好位于WPF窗口内,那么它将仅在该窗口内查找控件。由于TextBox不在窗口中,因此您无法找到它。

此时,我不知道您是否打算在窗口中找到其中一个TextBox,或者您是否真的想在控件模板中找到一个TextBox。看看t

请参阅Why doesnt Window.FindName() discover the x:Name of a button in a child UserControl? AKA how do NameScopes work?以获得比我能给出的更好的解释。简而言之:你可能想以另一种方式做到这一点。