2013-10-01 27 views
2

Im使用帶有變量appbar的pivot控件。 正如我所看到的,appbar鏈接到app.xaml.cs中的一個資源,您可以在其中放置按鈕及其方法的信息。它看起來像這樣:如何使用app.xaml.cs中MainPage中的方法和變量appbar樞軸

<shell:ApplicationBar x:Key="AppBar1" IsVisible="True" IsMenuEnabled="False"> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.places.png" Text="TEXT" Click="ApplicationBarIconButton_Click11" /> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.calendar.month.png" Text="TEXT" Click="ApplicationBarIconButton_Click12" /> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.star.png" Text="TEXT" Click="ApplicationBarIconButton_Click13" /> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.people.multiple.png" Text="TEXT" Click="ApplicationBarIconButton_Click14" /> 
    </shell:ApplicationBar> 

    <shell:ApplicationBar x:Key="AppBar2" IsVisible="True" IsMenuEnabled="False"> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.warning.circle.png" Text="TEXT" Click="ApplicationBarIconButton_Click21" /> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.qr.png" Text="TEXT" Click="ApplicationBarIconButton_Click22" /> 
    </shell:ApplicationBar> 

    <shell:ApplicationBar x:Key="AppBar3" IsVisible="True" IsMenuEnabled="False"> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.add.png" Text="TEXT" Click="ApplicationBarIconButton_Click31" /> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.message.png" Text="TEXT" Click="ApplicationBarIconButton_Click32" /> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.email.png" Text="TEXT" Click="ApplicationBarIconButton_Click33" /> 
     <shell:ApplicationBarIconButton IconUri="/Images/iconos/appbar.warning.circle.png" Text="TEXT" Click="ApplicationBarIconButton_Click34" /> 
    </shell:ApplicationBar> 

每個diferent按鈕有一個方法,實際上是他們的一個是誰導航到另一個部分工作正常:

private void ApplicationBarIconButton_Click11(object sender, EventArgs e) 
    { 
     (Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/seccmapa/localeslist.xaml", UriKind.Relative)); 
    } 

但現在我想這個按鈕之一調用主頁的方法,我想是這樣的:

private void ApplicationBarIconButton_Click51(object sender, EventArgs e) 
    { 
     ((MainPage)App.Current.RootVisual).cambioperfil(); 
    } 

而在該的MainPage方法是:

public async void cambioperfil() 
    { 
     objetoslistas.setprofileinput paquete = new objetoslistas.setprofileinput(); 
     paquete.nickName = nombre.Text; 
     paquete.statusMessage = status.Text; 
     paquete.isMen = isMen; 
     paquete.birthDate = Fecha_nacimiento.Value.ToString(); 
     if (Visibilidad.IsChecked == true) 
     { 
      paquete.mapVisibility = true; 
     } 
     else 
     { 
      paquete.mapVisibility = false; 
     } 
     Uri url = new Uri("url"); 
     string respuesta = await metodosJson.jsonPOST(url, paquete); 

    } 

但是這給了MI和異常:

{System.InvalidCastException: Unable to cast object of type 'Microsoft.Phone.Controls.PhoneApplicationFrame' to type 'X.MainPage' 

任何想法?

回答

3

你的問題是,RootVisualPhoneApplicationFrame,所以不能轉換爲從PhoneApplicationPage繼承MainPage

相反,您應該訪問框架的Content

(MainPage)(((System.Windows.Controls.ContentControl)(App.RootFrame)).Content).cambioperfil(); 

雖然您可能希望爲呼叫頁面不是MainPage時添加適當的檢查。

+0

謝謝,這工作:((的MainPage)(((System.Windows.Controls.ContentControl)(App.RootFrame))的含量))cambioperfil( ); – Mulflar

1

這是一個通用的如何基於我編寫的應用程序所需的代碼。我知道的情況略有不同,但它可以幫助別人誰是類似的解決方案後:

在MainPage.xaml中創建的方法如下:

public static void InMainPage() 
{ 
    System.Diagnostics.Debug.WriteLine("Hi I am a method in MainPage.xaml.cs"); 
} 

現在App.xaml.cs你可以在任何方法調用它是這樣:

MainPage.InMainPage();