我的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");
我该如何解决这个问题?感谢。
答案 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?以获得比我能给出的更好的解释。简而言之:你可能想以另一种方式做到这一点。