WebView呈现闪烁

时间:2017-05-10 14:54:25

标签: c# windows uwp uwp-xaml

我正在开发一个UWP项目,我想加载一个opacity = 0.01f的WebView,并且只在调用WebView_LoadCompleted时将opacity设置为1.0f。在此之前,它由预览图像呈现。但是当我展示它的时候,它会像20个案例中的1个一样闪烁白色,而我正在测试相同的WebView内容。 我的代码如下所示:

            Grid grid = new Grid();
            //set previewImage as preview of grid content
            Image backgroundImage = new Image();
            backgroundImage.Source = new BitmapImage(new Uri(@"ms-appdata:///local/" + "some path"));
            grid.Children.Add(backgroundImage);
            grid.SetValue(Grid.RowProperty, slide.Pos.Y);
            grid.SetValue(Grid.ColumnProperty, slide.Pos.X);
            MainGrid.Children.Add(grid);

            WebView webView = new WebView();
            webView.NavigationStarting += WebView_NavigationStarting;
            webView.LoadCompleted += WebView_LoadCompleted;
            webView.ScriptNotify += WebView_ScriptNotify;
            webView.Opacity = 0.01f;
            Uri navigationUri = "some local file Uri");
            webView.NavigateToLocalStreamUri(navigationUri, myResolver); // myResolver checks if source is allowed to load
            webView.Width =  1024;
            webView.Height = 768;
            Viewbox viewBox = new Viewbox();
            viewBox.Stretch = Stretch.Uniform;
            viewBox.Child = webView;
            grid.Children.Add(viewBox);

我的WebView_LoadCompleted看起来像这样:

    private void WebView_LoadCompleted(object sender, NavigationEventArgs e)
    {
        WebView webView = (WebView)sender;
        webView.Opacity = 1.0f;
    }

我期待WebView只会立即呈现其已加盖的内容,因为它在ViewBox中是可见的(低选择性),并且大多数时候它不会闪烁,但它仍然会出现。

在WebView_LoadCompleted工作之后尝试接听电话时,我尝试了一些调用,如x_LayoutUpdated,x_SizeChanged用于WebView和ViewBox,但WebView_LoadCompleted是最后一个被调用到断点的函数。

将WebView.DefaultBackgroundColor设置为透明不起作用,它仍然闪烁白色。 将WebView置于图像下方并在延迟布局时间后将其放到前面不起作用。

感谢您的帮助!我很感激!

1 个答案:

答案 0 :(得分:1)

看起来没有正确的方法来验证webview是否已完成webview的所有可能加载和呈现过程。 但是你可以将其他问题的答案用于其他UIElements:

Answer