WebView始终是最重要的组件

时间:2012-02-23 22:22:54

标签: wpf xaml windows-8 windows-runtime microsoft-metro

我正在使用W8 Metro UI样式应用程序开发报告仪表板应用程序。该应用程序有一个黑暗的主题,因此大多数屏幕是黑色的。我正在使用WebView控件从我们的报表服务器(都具有黑色背景)显示SSRS .rdl报表。我看到的问题是,当我导航到新报告时,WebView控件会瞬间闪烁白色,然后加载新报告。为了解决这个问题,我尝试在WebView控件上放置一个Easing不透明度动画,使其淡出,加载报告,然后淡入。但是,无论我尝试什么,我都无法让闪烁消失

然后我尝试在WebView的顶部放置一个黑色矩形,然后逐渐淡出那个......仍然没有运气。 WebView在运行时始终处于最佳状态,这意味着我无法对其进行任何控制。有没有人知道解决这个问题的方法?

我简明地查看了WebView.Transitions,但找不到很多资源。这可能是我的答案吗?

编辑:

加载新报告的事件:

void ItemListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // Create a WebViewBrush of the content currently loaded in the WebView
    WebViewBrush b = new WebViewBrush();
    b.SourceName = "WebView1";
    b.Redraw();
    Rectangle1.Fill = b;

    // Hide the WebView
    WebView1.Visibility = Windows.UI.Xaml.Visibility.Collapsed;

    // Navigate to the new report
    var selectedItem = ItemListView.SelectedItem;
    WebView1.Navigate(((Report)selectedItem).ReportUri);
}

void WebView1_LoadCompleted(object sender, Windows.UI.Xaml.Navigation.NavigationEventArgs e)
{
    // Show the new report
    WebView1.Visibility = Windows.UI.Xaml.Visibility.Visible;
    Rectangle1.Fill = new SolidColorBrush(Colors.Transparent);
 }

1 个答案:

答案 0 :(得分:0)

这就是WebView的工作方式,因为在内部它将三叉戟COM控件加载到一个单独的hwnd中。解决方法是在Webview上将Visibility设置为Hidden,而是显示一个不是交互式的webviewbrush,但它与UI的其余部分集成,因此可以设置动画等等。