x:Name 在当前上下文中不存在,但其父级存在
x:Name does not exist in the current context, but its parent does
我想更新弹出窗口中的一些文本。但是,当我尝试在后面的代码中设置它的值时,出现错误 "The name 'dateChosen' does not exist in the current context".
后面的代码:
private void updateDateBinding()
{
lstMenus.Visibility = Visibility.Visible;
dateChosen.Text = ""; // <-- Error here
}
Xaml代码:
<ListView x:Name="lstMenus">
<!-- ...other code... -->
<TextBox x:Name="dateChosen" IsReadOnly="True"
Text="{Binding getDateChosen, Mode=TwoWay}"/>
<!-- ...other code... -->
</ListView>
最初我只打算使用 PropertyChanged 事件来更新 'dateChosen' 但在调用该事件时它没有更新。所以我决定改为显式设置值,结果发现了这个问题。
让我感到困惑的是 'lstMenus' 可以完全按照我的预期进行更改。我的ListView怎么可能存在,里面的TextBox却没有?
-
PS:我已经从中删除了大部分多余的代码(Height/Width、背景、对齐等),但我觉得我应该提一下,所讨论的 TextBox 非常深入地嵌套在这段代码。完整的继承是:
ListView(lstMenus) - ListView.ItemTemplate - DataTemplate - StackPanel - Grid - Grid - AppBarButton - AppBarButton.Flyout - Flyout - Grid - Grid - TextBox(dateChosen)
我已经尝试为一些中间标记设置 'x:Name' 属性,但是当我尝试从后面的代码访问它们时,总是遇到相同的 "not in current context" 问题。
这个问题时常出现。看这里:http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html
由于控件位于生成的容器中,因此它实际上已不在范围内。这就是为什么你不能引用它。您将不得不向 ListView 询问容器,然后向容器询问元素。该博客文章将解释这些步骤。这并不难。
想一想,如果你的 ListView 中有 10 个项目,你不会有 10 个同名的项目吗?当然,你不能那样做。而且,这就是这个问题存在的原因。 ListView 必须限制子项的范围,以免违反简单的 OOP。
我想更新弹出窗口中的一些文本。但是,当我尝试在后面的代码中设置它的值时,出现错误 "The name 'dateChosen' does not exist in the current context".
后面的代码:
private void updateDateBinding()
{
lstMenus.Visibility = Visibility.Visible;
dateChosen.Text = ""; // <-- Error here
}
Xaml代码:
<ListView x:Name="lstMenus">
<!-- ...other code... -->
<TextBox x:Name="dateChosen" IsReadOnly="True"
Text="{Binding getDateChosen, Mode=TwoWay}"/>
<!-- ...other code... -->
</ListView>
最初我只打算使用 PropertyChanged 事件来更新 'dateChosen' 但在调用该事件时它没有更新。所以我决定改为显式设置值,结果发现了这个问题。
让我感到困惑的是 'lstMenus' 可以完全按照我的预期进行更改。我的ListView怎么可能存在,里面的TextBox却没有?
-
PS:我已经从中删除了大部分多余的代码(Height/Width、背景、对齐等),但我觉得我应该提一下,所讨论的 TextBox 非常深入地嵌套在这段代码。完整的继承是:
ListView(lstMenus) - ListView.ItemTemplate - DataTemplate - StackPanel - Grid - Grid - AppBarButton - AppBarButton.Flyout - Flyout - Grid - Grid - TextBox(dateChosen)
我已经尝试为一些中间标记设置 'x:Name' 属性,但是当我尝试从后面的代码访问它们时,总是遇到相同的 "not in current context" 问题。
这个问题时常出现。看这里:http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html
由于控件位于生成的容器中,因此它实际上已不在范围内。这就是为什么你不能引用它。您将不得不向 ListView 询问容器,然后向容器询问元素。该博客文章将解释这些步骤。这并不难。
想一想,如果你的 ListView 中有 10 个项目,你不会有 10 个同名的项目吗?当然,你不能那样做。而且,这就是这个问题存在的原因。 ListView 必须限制子项的范围,以免违反简单的 OOP。