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 ответ

FindName не будет работать, потому что TextBox находится в шаблоне. Это объявление на самом деле не создает TextBox с именем "QuantiteTextBox". Вместо этого GridViewColumn использует этот TextBox в качестве шаблона для создания большего количества TextBox. Представьте, что этот GridViewColumn был в GridView с 10 строками. Вы можете получить 10 экземпляров TextBox, поэтому не существует ни одного TextBox с таким именем.

Когда вы вызываете FindName, он запрашивает определенную область. Если код, который вы разместили, находится прямо в окне WPF, он будет искать элементы управления только в этом окне. Так как этого TextBox нет в окне, вы его не найдете.

На данный момент, я не знаю, хотели ли вы найти один из текстовых блоков в окне или вы действительно хотите найти его в шаблоне элемента управления. Посмотрите на т

См. Почему Window.FindName() не обнаруживает x: Имя кнопки в дочернем UserControl? АКА, как работают NameScopes? для лучшего объяснения, чем я могу дать. Короче говоря: вы, вероятно, хотите сделать это по-другому.

Другие вопросы по тегам