[UWP] Проблема с ScrollViewer
От: RainBoy  
Дата: 14.10.19 19:14
Оценка:
Добрый день

Имеется ScrtollViewer с кучей элементов внутри (Сильно упрощено)

<Grid>
    <ScrollViewer>
    <StackPanel>
            <Button>
                <TextBox>
                </TextBox>
            </Button>
            <!-- И еще много элементов -->
    </StackPanel>
    </ScrollViewer>
</Grid>



Проблема — с одной моделью тач скринов, которые мы используем, есть проблема. Нажатия на кнопки обрабатываются крайне нестабильно, в 90% случаев происходит минимальный сдвиг ViewPort и все.
Я пробовал перехватить OnManipulationDelta и блокировать небольные перемещения, безуспешно. Единственное событие, которое я могу перехватить — OnViewChanging, но там невозможно блокировать мзменение ViewPort.
Наследоваться от ScrollViewer в UWP невозможно, sealed (зачем это сделано?)

Любые советы приветствуются.
Отредактировано 14.10.2019 19:18 RainBoy . Предыдущая версия . Еще …
Отредактировано 14.10.2019 19:16 RainBoy . Предыдущая версия .
Отредактировано 14.10.2019 19:16 RainBoy . Предыдущая версия .
Re: [UWP] Проблема с ScrollViewer
От: Vladek Россия Github
Дата: 23.10.19 16:45
Оценка:
Здравствуйте, RainBoy, Вы писали:

RB>Проблема — с одной моделью тач скринов, которые мы используем, есть проблема. Нажатия на кнопки обрабатываются крайне нестабильно, в 90% случаев происходит минимальный сдвиг ViewPort и все.

RB>Я пробовал перехватить OnManipulationDelta и блокировать небольные перемещения, безуспешно. Единственное событие, которое я могу перехватить — OnViewChanging, но там невозможно блокировать мзменение ViewPort.
RB>Наследоваться от ScrollViewer в UWP невозможно, sealed (зачем это сделано?)

Надо подписываться на базовые события PointerPressed/PointerReleased/PointerCanceled у конкретных элементов внутри скроллера и вызывать методы CapturePointer/ReleasePointerCapture. Иначе скроллер будет любые манипуляции пытаться обрабатывать, ведь это его основная работа. Либо реализовывайте прокрутку элементов с помощью обычных ScrollBar.
Re[2]: [UWP] Проблема с ScrollViewer
От: RainBoy  
Дата: 31.10.19 13:06
Оценка:
Здравствуйте, Vladek, Вы писали:

V>Надо подписываться на базовые события PointerPressed/PointerReleased/PointerCanceled у конкретных элементов внутри скроллера и вызывать методы CapturePointer/ReleasePointerCapture.


Пробовал. PointerPressed есть всегда, PointerReleased/PointerCanceled генерируются крайне редко. Я перерыл MSDN и пробовал все возможные события, без особого толка.
Видимо, наша удачная модель тач скринов имеет совсем косые драйвера.
Проблема частично решилась отключением зуммирования. Теперь есть другая проблема — в коде полно других подобных мест. Выставление ScrollViewer.ZoomMode="Disabled" ни к какому результату не приводит, в live viewer видно, что зум как был включен, так и остался.

Спасибо за ответ!
Re[3]: [UWP] Проблема с ScrollViewer
От: Vladek Россия Github
Дата: 01.11.19 06:24
Оценка:
Здравствуйте, RainBoy, Вы писали:

RB> Проблема частично решилась отключением зуммирования. Теперь есть другая проблема — в коде полно других подобных мест. Выставление ScrollViewer.ZoomMode="Disabled" ни к какому результату не приводит, в live viewer видно, что зум как был включен, так и остался.


Ну могу только посоветовать дождаться выхода WinUI 3.0 и взять код ScrollViewer для исследований оттуда. Я сам использую GestureRecognizer для манипулирования элементами внутри ScrollViewer — на коммерческом железе это работает стабильно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.