2013-10-01 5 views
2

Im используя элемент управления с переменной панелью объявлений. Как я вижу, панель приложений связана с ресурсом в app.xaml.cs, где вы помещаете информацию о кнопках и методах. Это выглядит следующим образом:Как использовать метод в MainPage из app.xaml.cs с переменной pabot 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); 

    } 

Но это дает ми и исключение:

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

Любая идея?

ответ

3

Ваш вопрос о том, что RootVisual является PhoneApplicationFrame и поэтому не может быть приведен к MainPage, который наследуется от PhoneApplicationPage.

Вместо этого вы должны получить доступ к Content кадра.

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

Возможно, вы захотите добавить соответствующие проверки, если вызывающая страница не является главной страницей.

+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();