0

My FindName does not work, the value is null.
And I can't call my x:Name="QuantiteTextBox" in my code-behind...
The name seems to not exist in this context..

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");

How can I resolve this problem please ? Thanks.

4

1 回答 1

1

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

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

在这一点上,我不知道您是否打算在 Window 中找到一个 TextBox,或者您是否真的想要在控件模板中找到一个。看看t

请参阅为什么 Window.FindName() 没有发现子用户控件中按钮的 x:Name?AKA NameScopes 是如何工作的?以获得比我能给出的更好的解释。简而言之:您可能想以另一种方式做到这一点。

于 2015-02-04T21:33:45.557 回答