簡體   English   中英

如何在app.xaml.cs中使用具有可變appbar樞軸的MainPage中的方法

[英]How to use a method in MainPage from app.xaml.cs with variable appbar pivot

我使用帶有可變appbar的數據透視控件。 如我所見,appbar鏈接到app.xaml.cs中的資源,您可以在其中放置按鈕的信息和方法。 看起來像這樣:

<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));
    }

但是現在我想要其中一個按鈕在Main頁面中調用方法,我嘗試了如下操作:

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' 

任何想法?

您的問題是RootVisualPhoneApplicationFrame ,因此無法轉換為繼承自PhoneApplicationPageMainPage

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

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

不過,您可能要為調用頁面不是MainPage的情況添加適當的檢查。

這是基於我正在編寫的應用程序所需代碼的通用方法。 我知道情況略有不同,但可能會幫助采用類似解決方案的其他人:

在MainPage.xaml中,您可以如下創建方法:

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

現在,在App.xaml.cs中,您可以使用以下任何方法調用它:

MainPage.InMainPage();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM