2013-10-01 3 views
2

변수 appbar가있는 피벗 컨트롤을 사용하고 있습니다. 보시다시피 appbar는 app.xaml.cs의 리소스에 연결되어 있습니다. 여기에 버튼과 메소드 정보가 들어 있습니다. 잘하는 방법, 다른 섹션으로 이동 중 실제로 하나의의를 변수 appbar pivot이있는 app.xaml.cs의 MainPage에서 메서드를 사용하는 방법

<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> 

개의 다른 버튼의 각을 작업 한

: 그것은 다음과 같습니다

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의 방법이다 :

,363,210
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

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

내가 쓰는 앱에 필요한 코드를 기반으로하는 일반적인 방법은 다음과 같습니다. 나는 상황이 약간 다른 것을 알고 있지만, 유사한 솔루션 이후 다른 사람이 도움이 될 수

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

을 지금 App.xaml.cs를에서 다음과 같이

가에서 MainPage.xaml에서

당신이 방법을 만듭니다 당신은 어떠한 방법으로 호출 할 수 있습니다!. 작동

MainPage.InMainPage();