GridView中的WebView作为项目接管UWP中的ItemClick事件

时间:2018-05-18 18:24:59

标签: uwp uwp-xaml

我在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的唯一方法。

2 个答案:

答案 0 :(得分:1)

添加跨越Border的{​​{1}}会使WebView获得焦点并变为可点击。所以GridViewItem变成了

DataTemplate

目前不建议使用Win2D渲染SVG,因为它的效果远低于WebView。

答案 1 :(得分:0)

我建议使用WebViewImageBrush,将webview渲染为图像,或使用Win2D渲染SVG。性能更高。您也可以尝试设置WebView.IsHitTestVisible = false;