2

我使用带有变量 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));
    }

但是现在我想要其中一个按钮在主页中调用一个方法,我尝试了这样的事情:

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' 

任何想法?

4

2 回答 2

3

您的问题是RootVisualis a PhoneApplicationFrame,因此不能转换为 a MainPage,它继承自PhoneApplicationPage.

相反,您应该访问Content框架的。

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

当调用页面不是 MainPage 时,您可能需要添加适当的检查。

于 2013-10-01T13:49:59.757 回答
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();
于 2013-10-09T04:03:33.173 回答