События масштабирования UWP (сжатие) вызываются непоследовательно

#xaml #uwp #camera #pinchzoom

#xaml #uwp #камера #pinchzoom

Вопрос:

Я пытаюсь обнаружить масштабирование (сжатие) в своем приложении, но по какой-то причине события вызываются не последовательно (иногда они есть, иногда нет).

Я создал пример приложения, в котором это можно легко воспроизвести:

 <Page
    x:Class="Manipulate.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid Background="Red" ManipulationMode="Scale" ManipulationDelta="Grid_ManipulationDelta" ManipulationStarted="Grid_ManipulationStarted"/>
</Page>
  

 using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;

namespace Manipulate
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void Grid_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine($"Started {e.}");
        }

        private void Grid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine($"Delta {e.Delta.Scale}");
        }
    }
}
  

В моем реальном приложении я пытаюсь реализовать сжатие для увеличения масштаба в нашей пользовательской реализации камеры (вдохновленной https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/CameraManualControls ) однако, похоже, я не могу заставить это работать, потому ManipulationStarted что ни ManipulationDelta один из них не вызывается последовательно при каждом жесте щипка.

Я вижу это на нескольких устройствах Surface (Surface Book, Surface Go, Surface Pro 4).

Ответ №1:

Пожалуйста, проверьте этот документ о сенсорных взаимодействиях.

Жест манипуляции с зажимом Два или более пальцев касаются экрана и сближаются. Другими словами, вам нужно сблизить два нажатых пальца. Я тестировал с помощью симулятора, и он работает хорошо. И вот пример кода, на который вы могли бы сослаться.

 _compositeTransform.ScaleX = _compositeTransform.ScaleY = e.Delta.Scale;
  
  

Обновить

Производное от @Cosmin Похоже, что в сборке Windows, которую я использовал 20226.1000, была проблема. Проблема была исправлена, пожалуйста, проверьте блог здесь.

Комментарии:

1. Похоже, в сборке Windows, которую я использовал 20226.1000, возникла проблема. Проблема была исправлена в blogs.windows.com/windows-insider/2020/10/21 /…

2. Вы тестировали с последней версией?

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

4. Конечно, вы можете добавить его.