MyCustomPage.xaml没有在xamarin.Forms中加载webView

时间:2016-09-29 07:25:10

标签: xaml xamarin webview xamarin.android xamarin.forms

我是xamarin.forms的初学者,我正在开发xamainr.forms便携式项目,我正面临着问题。我的便携式项目中有一个.xaml页面,我使用以下代码行从App.cs导航到这个.xaml页面。

var ep = new CustomWebViewPage(dbPath);
var MainEv = new NavigationPage(ep);

这里在CustomWebViewPage中我使用WebView以下方式加载Url但是在成功执行之后,行模拟器不加载webView。我不知道为什么会这样。 我将CustomWebViewPage的代码粘贴如下。

CustomWebViewPage.xaml.cs

using XamarinDbokReader.SQLite_AppSample;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using System.IO;

namespace MyDummyProject
{
    public partial class CustomWebViewPage : ContentPage
    {
        public string dbPath = "";
        public CustomWebViewPage(string folderPath)
        {
            this.dbPath = folderPath;
            HttpHelperClass helperClass = new HttpHelperClass();
            InitializeComponent();
            var webView = new WebView();
            UrlWebViewSource urlWebViewSource = new UrlWebViewSource()
            {
                Url = UrlsList.FindUrl("ProEportalLoginPage") + UrlsList.ApiKeys(AppMode.ProductionMode.ToString())
            };
               webView.Source = urlWebViewSource;
               webView.Navigated += (s, e) =>
               {
                   if (e.Url.StartsWith("http://userInfo/?"))
                   {
                       string token = "";
                       try
                       {
                          string value_string = Uri.UnescapeDataString(e.Url.ToString());
                          token = value_string.Split('=')[1];
                          if (!string.IsNullOrEmpty(token))
                          {
                              string path = Path.Combine(dbPath.ToString(), "dBookStore.db3");
                              helperClass.SaveUserInformation(token, path);
                          }
                       }
                       catch (Exception ss)
                       {
                       }
                  }
            };
            wvEportalPage = webView;
        }
        public CustomWebViewPage()
        {

        }
    }
}

CustomWebViewPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="XamarinDbokReader.EportalPage">
    <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
    <WebView x:Name="wvEportalPage"></WebView>
</ContentPage>

App.cs

public App(bool isSqliteDbExist, string sPath)
    {
        isDbExist = isSqliteDbExist;
        dbPath = sPath;
        if (isDbExist)
        {
            if (isLoggedIn)
            {
                NavigationPage navPage = new NavigationPage(new BooksView());
                App.Current.MainPage = navPage;
            }
            else
            {
                var tdlx = new CustomWebViewPage(dbPath);
                var MainNave = new NavigationPage(tdlx);
            }
        }
        else
        {
            //When cursor is coming from MainActivity then following line executes. And then OnStart() method executes.
            ssd.CreateTablesInDb();
            isDbExist = true;
        }
    }

 protected override void OnStart()
    {
        if (isDbExist)
        {
            if (isLoggedIn)
            {
                NavigationPage navPage = new NavigationPage(new BooksView());
                App.Current.MainPage = navPage;
            }
            else
            {
                var ep = new CustomWebViewPage(dbPath);
                var MainEv = new NavigationPage(ep);

            }
        }
    }

MainActivity

 protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        global::Xamarin.Forms.Forms.Init(this, bundle);
        var documents = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
        var bookCoverFolder = Path.Combine(documents, "BooksCover");
        var booksCollection = Path.Combine(documents, "Books");
        var bookResource = Path.Combine(documents, "Resource");
        if(!Directory.Exists(bookCoverFolder))
            Directory.CreateDirectory(bookCoverFolder);
        if (!Directory.Exists(booksCollection))
            Directory.CreateDirectory(booksCollection);
        if(!Directory.Exists(bookResource))
            Directory.CreateDirectory(bookResource);
        SQLite_Android androidDb = new SQLite_Android();
        if (androidDb.IsExist())
        {
            LoadApplication(new App(true, androidDb.dbStorePath));
        }
        else
        {
            LoadApplication(new App(false, androidDb.dbStorePath));

        }
    }

3 个答案:

答案 0 :(得分:1)

WebView可能无法获得任何WidthHeight

尝试将VerticalOptionsHorizontalOptions属性设置为FillAndExpand

所以这样:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="XamarinDbokReader.EportalPage">
    <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
    <WebView x:Name="wvEportalPage" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"></WebView>
</ContentPage>

如果这似乎不起作用,请尝试将其包装在Grid

答案 1 :(得分:0)

感谢您提供了很棒的sugessions,但是我在代码中发现了我的错误。我在App.cs中犯了一个小错误。设置导航页后我没有将NavigationPage设置为MainPage。它应该如下。

var tdlx = new CustomWebViewPage(dbPath);
var MainNave = new NavigationPage(tdlx);
MainPage = MainNave;

它完美无缺。我知道MainPage,但由于其他一些地区我没有写,但最终还是有效。

答案 2 :(得分:0)

您必须为Xamarin WebView定义宽度和高度。