WebView как элемент в GridView принимает событие ItemClick в UWP - PullRequest
0 голосов
/ 18 мая 2018

Я использую WebView как элемент в GridView в UWP.Целью этого приложения является отображение файлов SVG, которые впоследствии могут быть отредактированы пользователем.

История Выбор WebView вместо SvgImageSource обусловлен качеством Svgs.составляет 100% (без пикселей), поэтому после многих неудачных попыток получить гладкие изображения с помощью Win2D я, наконец, выбрал единственно верный способ визуализации Svg, а именно WebView.В качестве примечания, наши Svgs сделаны только из путей, и рендеринг пути Xaml от Svgs значительно снизил производительность уже для одного файла SVG (около 300 КБ), так что, к сожалению, это не вариант.Итак, вернемся к 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 и отображается без проблем, но я не могунажмите только один раз на Предмет (событие запускается), но выбор остается за этим предметом, и я больше не могу нажимать ни на один предмет.и тому подобное, но как я могу решить эту проблему?

ps: я знаю, что WebView в GridView, возможно, слишком много, поскольку я смотрю только на отображение правильных изображений, но это единственный способпоказать родной SVG, который я могу достичь сейчас.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Добавление Border, которое охватывает WebView, заставляет GridViewItem получать фокус и становится кликабельным.Таким образом, DataTemplate становится

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
        <TextBlock Text="{x:Bind DisplayName}"/>
        <WebView Source="{x:Bind UriSource}" Grid.Row="1"/>
        <Border Grid.RowSpan="2" Background="Transparent"/>
</Grid>

. Использование Win2D для рендеринга SVG на сегодняшний день не рекомендуется, поскольку оказывается гораздо менее производительным, чем WebView.

0 голосов
/ 19 мая 2018

Я бы порекомендовал использовать WebViewImageBrush, визуализировать веб-вид на изображение или использовать Win2D для визуализации SVG.Намного более производительный.Вы также можете попробовать установить WebView.IsHitTestVisible = false;

...