【问题标题】:FindName does not work [duplicate]FindName 不起作用[重复]
【发布时间】:2015-02-04 21:07:13
【问题描述】:

我的FindName不起作用,值为null。
而且我不能在我的代码隐藏中调用我的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");

请问我该如何解决这个问题?谢谢。

【问题讨论】:

标签: c# wpf xaml datatemplate findname


【解决方案1】:

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

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

此时,我不知道您是否打算在 Window 中找到一个 TextBox,或者您是否真的想要在控件模板中找到一个。来看看吧

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2013-08-11
    • 2017-07-19
    • 2015-07-04
    • 2012-10-26
    • 2013-01-17
    • 2018-10-16
    相关资源
    最近更新 更多