Я пишу приложение, использующее 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, имеет предложение, как решить эту проблему?
Спасибо!!
@ BreezeLiu-MSFT Совершенно верно!
Здесь ссылка на файл .xaml 1drv.ms/u/s!AhXT8x-JilqWhfh7Pko7iPN7hNcI8w и файл .cs 1drv.ms/u/s!AhXT8x-JilqWhfh9uuLqE2LMB7uj2Q
Я также загрузил сюда весь простой пример проекта 1drv.ms/f/s!AhXT8x-JilqWhfhlSFN0IQUAffh6mA
Попробуйте увеличить холст, а затем сразу переместите линейку. Линейка застревает, пока вы не коснетесь холста, затем линейка разблокируется, но снова блокируется при следующем увеличении.
Я вижу проблему на своей стороне. После некоторой попытки кажется, что InkCanvas должен сначала получить фокус, прежде чем мы сможем снова переместить линейку, поэтому нам нужно нарисовать обводку на холсте.
Могу ли я программно сфокусировать InkCanvas? Я не мог понять, как это сделать.
Или любым другим способом добиться этого без необходимости интерактивного поглаживания холста.
Извините за задержку, мы все еще работаем над этим. Я сообщил об этом в нашем внутреннем канале, этим занимается другой инженер.
Большое спасибо за обновление. В настоящее время мне пришлось отключить линейку для устройств, на которых пользователи используют касание как для рукописного ввода, так и для масштабирования. Жду решения по включению линейки на всех устройствах.
После долгих усилий у нас есть сценарий для этой проблемы: удаление и повторное добавление линейки при увеличении и перемещении линейки. Как вы думаете, это удовлетворит ваши требования?
Не могли бы вы мне помочь с этим? Мне не удалось найти API для удаления добавленной линейки, и если я попытаюсь добавить ее снова, я получу исключение. Какой код для снятия линейки?
@ BreezeLiu-MSFT - как удалить линейку? При уничтожении и восстановлении линейки на том же InkCanvas создается исключение. Не могу найти API для удаления линейки. Я что-то пропустил?
Извините за задержку, мы попробовали обходной путь, но он по-прежнему не работает. Мы рассматриваем зарегистрированную проблему как известную в нашей системе, приносим извинения за неудобства.
@ClaudiaWey Я здесь, чтобы показать вам некоторую информацию. Эта проблема потенциально исследуется для будущей версии Windows.
Это фантастическая новость. Спасибо за обновление!
Не могли бы вы создать простой образец, чтобы воспроизвести его здесь, чтобы я мог разобраться в проблеме?