#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. Конечно, вы можете добавить его.