我在UWP的GridView中使用WebView作为项目。此应用程序的目的是显示Svg文件,以后可以由用户编辑。
记录
选择WebView而不是SvgImageSource
是因为Svgs的质量是100%(没有像素),因此在尝试使用Win2D获得平滑图像的许多失败后,我终于选择了我认为是唯一的本地渲染Svg的方法,即WebView
。作为旁注,我们的Svgs仅由路径构成,并且从Svgs渲染Xaml路径已经显着降低了一个svg文件(大约300kb)的性能,所以不幸的是这不是一个选项。回到WebView
:
<DataTemplate x:Key="SvgThumbnailItemTemplate" x:DataType="inkWorkPage:SvgThumbnail">
<WebView Source="{x:Bind UriSource}" Width="100" Height="100"/>
</DataTemplate>
和GridView
<GridView Grid.Row="1" Grid.Column="1"
ItemsSource="{x:Bind SvgImages}"
ItemTemplate="{StaticResource SvgThumbnailItemTemplate}"
ItemClick="SvgImagesGridView_ItemClick"/>
每个Svg文件都在其WebView中加载并且显示没有问题,但是我只能点击一次Item(事件被触发),但选择保留在这个项目上,我不能再点击任何项目。
我怀疑WebView
通过冒泡等来接管一些事件,但我该如何解决这个问题呢?
ps:我知道WebView
中的GridView
可能太多了,因为我只想显示正确的图像,但这是显示我现在可以实现的本机Svg的唯一方法。
答案 0 :(得分:1)
添加跨越Border
的{{1}}会使WebView
获得焦点并变为可点击。所以GridViewItem
变成了
DataTemplate
目前不建议使用Win2D渲染SVG,因为它的效果远低于WebView。
答案 1 :(得分:0)
我建议使用WebViewImageBrush,将webview渲染为图像,或使用Win2D渲染SVG。性能更高。您也可以尝试设置WebView.IsHitTestVisible = false;