x:Name在当前上下文中不存在,但它的父对象存在
本文关键字:存在 对象 不存在 Name 上下文 | 更新日期: 2023-09-27 18:11:48
我想在弹出框上更新一些文本。但是,当我试图在代码中设置其值时,我得到错误"名称'dateChosen'不存在于当前上下文中"。
背后的代码:
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怎么可能存在,而不是它里面的文本框?
PS:我已经削减了大部分多余的代码(高度/宽度,背景,对齐等),但我觉得我应该提到的问题的文本框是相当深嵌套在这块代码。完整的继承是:
ListView(lstMenus) - ListView。ItemTemplate - DataTemplate - StackPanel - Grid - Grid - AppBarButton - AppBarButton。弹出框-弹出框-网格-网格-文本框(dateChosen)
我已经尝试设置'x:Name'属性的一些干预标签,但总是得到相同的"不在当前上下文中"的问题,当我试图达到他们从后面的代码
这个问题经常出现。看这里:http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html
由于控件位于生成的容器中,因此它实际上不再在作用域中。这就是为什么你不能引用它。您必须向ListView请求容器,然后向容器请求元素。那篇博客文章将解释这些步骤。其实没那么难。
想想这个,顺便说一下,如果你有10个项目在你的ListView中,你不会有10个项目具有相同的名称吗?当然,你不能那样做。这就是这个问题存在的原因。ListView必须约束子项目的作用域,这样它就不会违反简单的OOP。