我在WP7手机应用程序中使用MVVM架构。我当前的视图是一个用户控件,它存在于父页面(标准页面-不是独立的用户控件)内。我已经将主页作为父传递给用户控件的"parent"属性,并且我可以访问父中的几乎任何控件。例如:在父节点
中访问一个可锁定的枢轴Dim p As LockablePivot
p = MyParent.FindControl("myLockablePivot")
If p IsNot Nothing Then
..do something with the pivot
End If
我的问题是在访问父应用程序栏。这行不通。我已经三次检查了分配给应用程序栏的x:Name。(空引用异常):
Dim ap As ApplicationBar
ap = MyParent.FindName("appBar")
ap.IsVisible = False
我遇到了同样的问题,但是正如Nigel在这个回答中指出的,
"ApplicationBar不是一个标准的Silverlight对象,因为它不适合可视化树,不能绑定到x:Name不起作用。"
在PhoneApplicationPage类上有一个ApplicationBar属性。你可以用它来访问应用程序栏,然后从那里抓取按钮或菜单项。
下面是我在页面构造函数中本地化文本的c#示例:public MyPage()
{
InitializeComponent();
(this.ApplicationBar.Buttons[0] as ApplicationBarIconButton).Text = AppResources.event_add_menu_item;
}
不可否认,使用索引来定位项目,然后不得不强制转换是不幸的,但至少它是有效的!