从全局AppBar访问页​​面方法

时间:2014-05-08 11:05:37

标签: c# xaml windows-phone-8

我在App.xaml中声明了一个全局AppBar:

<Application.Resources>
    <shell:ApplicationBar x:Name="mAppBar_Favorites" Mode="Default" Opacity="1.0" IsMenuEnabled="True" IsVisible="True">
        <shell:ApplicationBarIconButton IconUri="/mAppData/feature.camera.png" Text="Kamera" Click="btnAppBar_OpenCamera_Click"/>
        <shell:ApplicationBarIconButton IconUri="/mAppData/edit.png" Text="Favoriten" Click="btnAppBar_EditFavorites_Click"/>
        <shell:ApplicationBarIconButton IconUri="/mAppData/refresh.png" Text="Refresh" Click="btnAppBar_ReloadMainPage_Click"/>
        <shell:ApplicationBarIconButton IconUri="/mAppData/sort.png" Text="Sortieren" Click="btnAppBar_SortOrder_Click"/>

        <shell:ApplicationBar.MenuItems>
            <shell:ApplicationBarMenuItem Text="Einstellungen" Click="btnAppBar_ShowSettings_Click"/>
            <shell:ApplicationBarMenuItem Text="Über WhaGoO" Click="btnAppBar_About_Click"/>
        </shell:ApplicationBar.MenuItems>

    </shell:ApplicationBar>

</Application.Resources>

在App.xaml.cs中,我定义了按钮点击事件的方法,如下所示:

    private void btnAppBar_SortOrder_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Sortierreihenfolge der Listeneinträge ändern...");
    }

在某些页面上,我在代码后面的页面中显示带有此代码的AppBar:

    this.ApplicationBar = ((ApplicationBar)Application.Current.Resources["mAppBar_Favorites"]);

为此,每一件事都很好。但现在,在某些页面上,我必须访问页面的PivotControl来决定Uri导航到。例如,使用全局AppBar的“刷新”按钮会发生这种情况:

    private void btnAppBar_ReloadMainPage_Click(object sender, EventArgs e)
    {
        int mPivotIndex = Convert.ToInt16(pvtMainPivot.SelectedIndex.ToString());
        if (mPivotIndex == 1)
        {
            // Tab "Umgebung" aktualisieren:
            MainPage.fGetSurroundings();
        }
    }

我的应用主页有一个数据页面。现在我用更多页面扩展它,并且不想将AppBar“复制”到每个新页面。

如何通过导航和访问页面上的项目来解决这些问题?

1 个答案:

答案 0 :(得分:0)

对于每个人,他们都对解决方案感兴趣:

App.xaml.cs:

private void btnAppBar_ReloadMainPage_Click(object sender, EventArgs e)
{
    // calling a method of the page:
    ((MainPage)App.RootFrame.Content).MyMethod();

    // accessing a value:
    var mValue = MainPage.myValue.toString();
}

MainPage.xaml.cs中:

 public static int myValue;

 public void MyMethod()
 {
      // do stuff
 }