有没有办法使用Xamarin Forms预呈现WebView控件?

时间:2017-03-01 14:01:37

标签: c# android ios .net xamarin.forms

我创建了一组自定义html5音频控件,我在iOS和Android Xamarin Forms应用中使用它。 当我导航到我的应用程序中此内容所在的页面时,WebView会在呈现html内容之前呈现为白色框,只需几分之一秒。有没有办法在用户可见之前呈现此视图?

public partial class TutorialPage : ContentPage
{
    private readonly ITutorialViewModel _dataModel;

    public TutorialPage(ITutorialViewModel dataModel)
    {
        InitializeComponent();
        Title = "Tutorial";
        var browser = new WebView() { HeightRequest = 150, WidthRequest = 400, HorizontalOptions = LayoutOptions.CenterAndExpand };
        browser.Source = DependencyService.Get<IBaseUrl>().Get();
        mainStack.Children.Add(browser);
    }
}

2 个答案:

答案 0 :(得分:1)

您可以随时使用网页浏览的事件。

看看他们:

  

导航 - 导航完成后引发的事件。

     

导航 - 导航开始时引发的事件。

所以你要做的就是设置webview&#34; IsVisible&#34;在开始时将属性设置为false,并且当Navigated事件触发时,将其设置为true。

示例:

app.controller('2010controller', function() {

    var teams = [ 
        {
            name: 'Team One',
            position: 1,
            played: 38,
            won: 27,
            drawn: 5,
            lost: 6,
            goalsFor: 103,
            goalsAgainst: 32,
            goalDifference: 71,
            points: 86
        },
        {
            name: 'Team Two',
            position: 2,
            played: 38,
            won: 27,
            drawn: 4,
            lost: 7,
            goalsFor: 86,
            goalsAgainst: 28,
            goalDifference: 58,
            points: 85
        },
    ]

});

})

如果您不想将WebView作为全局类变量,可以从Navigated事件的sender参数获取它,如下所示:

public partial class TutorialPage : ContentPage
{
    private readonly ITutorialViewModel _dataModel;

    private WebView browser;

    public TutorialPage(ITutorialViewModel dataModel)
    {
        InitializeComponent();
        Title = "Tutorial";
        browser = new WebView() { HeightRequest = 150, WidthRequest = 400, HorizontalOptions = LayoutOptions.CenterAndExpand, IsVisible = false };
        browser.Source = DependencyService.Get<IBaseUrl>().Get();
        browser.Navigated += Browser_Navigated:
        mainStack.Children.Add(browser);
    }

    void Browser_Navigated (object sender, WebNavigatedEventArgs e)
    {
        browser.IsVisible = true;
    }
}

答案 1 :(得分:0)

我通过使背景透明来绕过我的问题。控件仍然会弹出,但它比在此期间在页面上有一个白色框更好。