我有一个非常基本的标签应用程序 第一页是使用Xamarin.Forms
的Web视图 <WebView x:Name="webview1" IsVisible="true" Source="" ></WebView>
我可以使用例如
从后面的.cs代码更新此视图的URL webview1.Source = "http://www.microsoft.com"
我有第二个标签,我用它来设置/附加信息。 在第二页上,我有一个按钮,点击后我想将第1页上的网页视图重置为新的网址/更新资源。
只是尝试在第二页上引用它告诉我,由于保护级别而无法使用静态项目的对象引用。
更新
public partial class launcher5Page : ContentPage
{
public launcher5Page()
{
InitializeComponent();
webview1.Source = "web address here";
}
public static bool changeURL(string urlString)
{
webview1.Source = urlString;
return true;
}
}
还在 错误CS0120:访问非静态成员
需要对象引用答案 0 :(得分:3)
我建议使用MessagingCenter
来完成这项工作。然后你可以这样做:
public partial class launcher5Page : ContentPage {
public launcher5Page() {
InitializeComponent();
webview1.Source = "web address here";
/* Normally you want to subscribe in OnAppearing and unsubscribe in OnDisappearing but since another page would call this, we need to stay subscribed */
MessagingCenter.Unsubscribe<string>(this, "ChangeWebViewKey");
MessagingCenter.Subscribe<string>(this, "ChangeWebViewKey", newWebViewUrl => Device.BeginInvokeOnMainThread(async () => {
webview1.Source = newWebViewUrl;
}));
}
}
然后在另一页上:
Xamarin.Forms.MessagingCenter.Send("https://www.google.com", "ChangeWebViewKey");
答案 1 :(得分:1)
您的changeURL
方法已标记为static
,这意味着它无法使用任何未标记为静态的内容。 Learn more about what static means.
由于类launcher5Page
是一个部分类,因此可以想象代码段中使用的webview1
变量是在类的不同部分中定义的。 webview1
被称为类member
的{{1}},因为它是在任何方法之外和类中定义的。
您的解决方案:从launcher5Page
方法移除static
关键字,或将changeURL
成员webview1
设为static
其他static
成员,例如{{} 1}}可以使用它。
changeURL
此外,所有这些与Xamarin完全无关,除了Xamarin是一组用c#编写的库。你的问题完全在于你缺乏对c#语言的了解。