[英]How to call a function that's in MainPage.xaml.cs from App.xaml.cs
[英]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'
任何想法?
您的问题是RootVisual
是PhoneApplicationFrame
,因此无法转换为继承自PhoneApplicationPage
的MainPage
。
相反,您应该访问框架的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.