我正在开发一个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置于图像下方并在延迟布局时间后将其放到前面不起作用。
感谢您的帮助!我很感激!
答案 0 :(得分:1)
看起来没有正确的方法来验证webview是否已完成webview的所有可能加载和呈现过程。 但是你可以将其他问题的答案用于其他UIElements: