【问题标题】:WebView is always the topmost componentWebView 始终是最顶层的组件
【发布时间】:2012-02-23 22:22:54
【问题描述】:

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

然后我尝试在 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);
 }

【问题讨论】:

  • 闪烁很糟糕,我的应用程序因此而未能通过证书。我认为它是 WinRT 中的一个错误。

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


【解决方案1】:

这正是 WebView 的工作方式,因为它在内部将 trident COM 控件加载到单独的 hwnd 中。解决方法是在 webview 上将 Visibility 设置为 Hidden,而是显示一个 webviewbrush,它不是交互式的,但确实与您的 UI 的其余部分集成,因此可以进行动画处理等

【讨论】:

  • 我试过了,但我仍然看到闪烁。我认为这可能与导航有关。还有其他建议吗? (我在原帖里加了一个代码sn-p)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多