Windows phone 7 从父级获取应用程序栏-Windows Phone

Windows phone 7 从父级获取应用程序栏-Windows Phone,windows-phone-7,mvvm,application-bar,Windows Phone 7,Mvvm,Application Bar,我正在WP7手机应用程序中使用MVVM架构。我当前的视图是一个用户控件,它存在于父页面(标准页面——不是独立的用户控件)中。我已经将主页作为父控件传递给用户控件的“parent”属性,并且我可以访问父控件中的几乎任何控件。例如:这用于访问父对象中的可锁定轴: Dim p As LockablePivot p = MyParent.FindControl("myLockablePivot") If p IsNot Nothing Then ..do something with the pivot

我正在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。(空引用异常):


任何帮助都将不胜感激。

我遇到了同样的问题,但正如奈杰尔在中指出的那样

“ApplicationBar不是标准的Silverlight对象,因为它实际上不适合可视化树,无法绑定到,并且x:Name不起作用。”

事实证明PhoneApplicationPage类上有一个属性。您可以使用它访问应用程序栏,然后从那里抓取按钮或菜单项

下面是一个C#示例,说明了我在页面构造函数中对文本进行本地化所做的操作:

public MyPage()
{
    InitializeComponent();

    (this.ApplicationBar.Buttons[0] as ApplicationBarIconButton).Text = AppResources.event_add_menu_item;
}
诚然,使用索引定位项目,然后必须强制转换是不幸的,但至少它是有效的

public MyPage()
{
    InitializeComponent();

    (this.ApplicationBar.Buttons[0] as ApplicationBarIconButton).Text = AppResources.event_add_menu_item;
}