【发布时间】:2016-02-12 05:12:28
【问题描述】:
我有一个非常简单的 RenderTargetBitmap.RenderAsync 重载破坏 WebView 缩放的重现案例。我在 MainPage 上只有一个 WebView 和一个按钮:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<WebView Source="http://bing.com"></WebView>
<Button Content="Render me"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Click="ButtonBase_OnClick" />
</Grid>
在后面的代码中只有一个简单的事件处理程序
private async void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
RenderTargetBitmap rtb = new RenderTargetBitmap();
await rtb.RenderAsync(this, 1280, 720);
}
这是调用 RenderAsync 之前页面的样子:
这就是通话后发生的事情:
知道为什么以及如何防止这种情况吗?请注意,只有当我调用时才会发生这种情况
await rtb.RenderAsync(this, 1280, 720);
但如果我在没有缩放的情况下调用重载
await rtb.RenderAsync(this);
编辑:由于我收到的第一个答案,我想澄清为什么纵横比不是这里的问题,而只是为了证明确实存在问题。考虑以下场景 - 非常高的 DPI 屏幕,只需要较低分辨率的屏幕截图 - 即使您使用 RIGHT 比例缩小它,它仍然会弄乱 WebView。此外,对于我的场景,事后手动调整屏幕截图的大小不是一种选择 - 具有缩放尺寸的 RenderAsync 重载要快得多,我真的更喜欢使用该方法。
【问题讨论】:
-
当然这是一个错误,唯一的解决方法是一个闪烁的小东西 MainWebView.Visibility = Visibility.Collapsed;等待 Task.Delay(10); MainWebView.Visibility = Visibility.Visible;
-
@JuanPabloGarciaCoello 谢谢,您和 Pieter 都提出了类似的解决方案。 :)
-
为什么不能手动调整位图大小?如果您是从前台(不是
XamlRenderingBackgroundTask)执行此操作,您可以使用 Win2D 等 GPU 加速方法来非常快地执行此操作。 -
WinComposition 团队正在从 UIElement 制作一个新的 get 画笔(这就是我的解释),但我认为在 Build 之前我们不会有消息,所以每年我们都会对所有 API 感到震惊消息。可能那时也解决了那个bug。
-
我还记得这个 WebViewBrush,我从来没有用过它,有趣的是它在 Windows Phone 不支持的 cmets 中说,内容不会被捕获(截图我明白)你试过这个吗确定吗?
标签: xaml webview windows-10 win-universal-app rendertargetbitmap