Невозможно взаимодействовать с InkPresenterRuler после прерывания рукописного ввода UWP

Я пишу приложение, использующее InkCanvas в UWP. В моем приложении я использую жест двойного касания для панорамирования и масштабирования и одно касание для рукописного ввода. Для этого я отключаю IsInputEnabled при обнаружении мультитач. Код для этого выглядит примерно так

InkManager.Element.InkPresenter.UnprocessedInput.PointerEntered += 
delegate (InkUnprocessedInput sender, PointerEventArgs args)
{
    if (args.CurrentPoint.PointerDevice.PointerDeviceType == PointerDeviceType.Touch)
    {
        _numContacts++;
        if (_numContacts == 2)
        {
            InkManager.Element.InkPresenter.IsInputEnabled = false;
        }
    }
 };

Затем я снова включаю IsInputEnabled после манипуляции с представлением.

Все работает нормально, кроме линейки.

 InkPresenterRuler Ruler = new InkPresenterRuler(InkManager.Element.InkPresenter)
 {
     Length = _container.Width
 };

Если у меня есть InkPresenterRuler, прикрепленный к холсту, линейку больше нельзя будет перемещать, пока я не добавлю хотя бы один штрих к холсту. Похоже, что когда я отключаю ввод на лету, выполняющееся рисование было успешно прервано на InkPresenter, но оставалось приостановленным на присоединенной линейке до тех пор, пока не будет обработан следующий ввод. Та же проблема относится к InkPresenterProtractor.

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

Кто-нибудь, кто работает с InkCanvas в UWP, имеет предложение, как решить эту проблему?

Спасибо!!

Не могли бы вы создать простой образец, чтобы воспроизвести его здесь, чтобы я мог разобраться в проблеме?

Breeze Liu - MSFT 13.08.2018 05:08

@ BreezeLiu-MSFT Совершенно верно!

ClaudiaWey 15.08.2018 02:42

Здесь ссылка на файл .xaml 1drv.ms/u/s!AhXT8x-JilqWhfh7Pko7iPN7hNcI8w и файл .cs 1drv.ms/u/s!AhXT8x-JilqWhfh9uuLqE2LMB7uj2Q

ClaudiaWey 15.08.2018 02:52

Я также загрузил сюда весь простой пример проекта 1drv.ms/f/s!AhXT8x-JilqWhfhlSFN0IQUAffh6mA

ClaudiaWey 15.08.2018 02:54

Попробуйте увеличить холст, а затем сразу переместите линейку. Линейка застревает, пока вы не коснетесь холста, затем линейка разблокируется, но снова блокируется при следующем увеличении.

ClaudiaWey 15.08.2018 02:58

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

Breeze Liu - MSFT 15.08.2018 10:49

Могу ли я программно сфокусировать InkCanvas? Я не мог понять, как это сделать.

ClaudiaWey 15.08.2018 13:13

Или любым другим способом добиться этого без необходимости интерактивного поглаживания холста.

ClaudiaWey 15.08.2018 13:42

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

Breeze Liu - MSFT 05.09.2018 04:36

Большое спасибо за обновление. В настоящее время мне пришлось отключить линейку для устройств, на которых пользователи используют касание как для рукописного ввода, так и для масштабирования. Жду решения по включению линейки на всех устройствах.

ClaudiaWey 16.09.2018 02:48

После долгих усилий у нас есть сценарий для этой проблемы: удаление и повторное добавление линейки при увеличении и перемещении линейки. Как вы думаете, это удовлетворит ваши требования?

Breeze Liu - MSFT 20.09.2018 08:03

Не могли бы вы мне помочь с этим? Мне не удалось найти API для удаления добавленной линейки, и если я попытаюсь добавить ее снова, я получу исключение. Какой код для снятия линейки?

ClaudiaWey 24.09.2018 14:30

@ BreezeLiu-MSFT - как удалить линейку? При уничтожении и восстановлении линейки на том же InkCanvas создается исключение. Не могу найти API для удаления линейки. Я что-то пропустил?

ClaudiaWey 29.09.2018 15:00

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

Breeze Liu - MSFT 01.10.2018 03:37

@ClaudiaWey Я здесь, чтобы показать вам некоторую информацию. Эта проблема потенциально исследуется для будущей версии Windows.

Barry Wang 25.10.2018 07:26

Это фантастическая новость. Спасибо за обновление!

ClaudiaWey 26.10.2018 03:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
16
163
0

Другие вопросы по теме