我添加了一个公共方法来返回变量pageLoaded,但是Visual Studio显示此错误“方法MainPage.PageLoaded()所需的对象引用不是静态的”。逻辑是仅在pageLoaded为true时才完成Splash Activiy。如果有人对此有更好的主意,那我将很高兴知道,我才刚刚开始学习C#/ Xamarin。
我的代码:
namespace MyApp
{
public partial class MainPage : ContentPage
{
private bool pageLoaded = false;
public MainPage()
{
InitializeComponent();
webnav.HeightRequest = 1000;
webnav.WidthRequest = 1000;
webnav.Source = "https://www.example.com";
}
public void Webnav_Navigated(object sender, WebNavigatedEventArgs e)
{
pageLoaded = true;
}
public bool PageLoaded()
{
return pageLoaded;
}
}
}
代码2:
...
...
using MyApp;
namespace MyApp.Droid
{
[Activity(Label = "My App", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = false, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
while (true)
{
if (MainPage.PageLoaded())
{
SplashScreen.fa.Finish();
break;
}
}
}
}
}
答案 0 :(得分:1)
问题:
您的.PageLoaded()
方法是 instance方法。它只能在类型为MainPage
的实例化对象上调用
您在初始屏幕中对它的引用正在尝试将其作为静态方法调用,这有两个问题:
解决方案:
不要这样做。从知道何时已加载的页面实例控制初始屏幕的可见性。在MainPage
编辑:
要进一步阐明区别:
// calling a method against the static definition of the class
MainPage.PageLoaded();
// calling a method against an instance of the class
new MainPage().PageLoaded();
以上代码不是解决方案,而是实例方法与静态方法之间差异的示例。 您的 PageLoaded
方法不应是静态的,因为您到目前为止已将所有内容都布置了。
答案 1 :(得分:-3)
由于MainPage类不是静态的,因此您需要创建MainPage类的对象,并使用该对象从该类中调用方法。