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

发布于 2024-12-11 02:22:52 字数 501 浏览 0 评论 0原文

我在 WP7 手机应用程序中使用 MVVM 架构。我当前的视图是一个用户控件,它存在于父页面(标准页面——不是独立的用户控件)内。我已将主页作为父级传递给用户控件的“父级”属性,并且我可以访问父级中的几乎任何控件。例如:这可以访问父级中的可锁定枢轴:

Dim p As LockablePivot
p = MyParent.FindControl("myLockablePivot")
If p IsNot Nothing Then
..do something with the pivot
End If

我的问题是访问父级中的 ApplicationBar 。这是行不通的。我已经三次检查了分配给应用程序栏的 x:Name。 (空引用异常):

    Dim ap As ApplicationBar
    ap = MyParent.FindName("appBar")

    ap.IsVisible = False

任何帮助将不胜感激。

I'm using MVVM architecture in a WP7 phone app. My current view is a user control, which exists inside of a parent page (standard page -- not stand-alone user control). I have passed the main page as a parent to a "parent" property of the user control, and I can access pretty much any control in the parent. For example: this works to access a lockable pivot in the parent:

Dim p As LockablePivot
p = MyParent.FindControl("myLockablePivot")
If p IsNot Nothing Then
..do something with the pivot
End If

My problem is in accessing the ApplicationBar in the parent. This does not work. I have triple checked the x:Name assigned to the application bar. (null reference exception):

    Dim ap As ApplicationBar
    ap = MyParent.FindName("appBar")

    ap.IsVisible = False

Any help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜`诱少女 2024-12-18 02:22:52

我遇到了同样的问题,但正如 Nigel 在这个答案中指出的那样,

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

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

下面是我在页面构造函数中为本地化文本所做的 C# 示例:

public MyPage()
{
    InitializeComponent();

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

诚然,使用索引来定位项目然后必须进行强制转换是不幸的,但至少它有效!

I hit the same issue, but as Nigel points out in this answer, the

"ApplicationBar isn't a standard Silverlight object, because of that it doesn't really fit in the visual tree, can't be bound to and x:Name doesn't work."

It turns out that there is an ApplicationBar property on the PhoneApplicationPage class. You can use it to access the Application Bar and then grab the Buttons or MenuItems from there.

Here is a C# example of what I did in my page constructor to localize the text:

public MyPage()
{
    InitializeComponent();

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

Admittedly, using the index to locate the item and then having to cast is unfortunate, but at least it works!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文