Сложно получить элементы управления в элементе управления SurfaceScrollViewer, чтобы получить фокус

Это немного странно, поэтому я надеялся, что, возможно, кто-то еще сталкивался с этим и, возможно, знает, как это решить.

Я работаю над приложением WPF, которое в конечном итоге будет работать на планшетных ПК с Windows. Поскольку это устройство с сенсорным экраном, я использовал элемент управления SurfaceScrollViewer при отображении списков элементов для прокрутки, и это работает очень хорошо.

Я обнаружил, что если я покажу элемент управления TextBox в SurfaceScrollViewer, вы не сможете редактировать текстовое поле, если не нажмете его несколько раз пять или шесть раз очень быстро — только тогда они получат фокус.

Если вместо этого я использую ScrollViewer, он работает нормально. Он также отлично работает при запуске на рабочем столе - это проблема только на планшетном ПК.

Любые идеи?

Подводя итог, это основная структура: SurfaceScrollViewer/StackPanel/ItemsControl.

Даже если у меня есть только один элемент управления TextBox в качестве DataTemplate ItemsControl, он все равно страдает от той же проблемы.

О, и это происходит и с кнопками. Он не ограничивается элементом управления TextBox.


person Matt Winward    schedule 31.08.2011    source источник


Ответы (1)


TextBox и Button не умеют обрабатывать события Touch, как это делают элементы управления Surface*. Когда вы касаетесь TextBox, сначала отправляется событие касания. TextBox игнорирует его, поэтому он переходит к SurfaceScrollViewer. SSV говорит: «Да, хорошо, я могу что-то с этим сделать», поэтому он обрабатывает событие и фиксирует ввод. TextBox не получает никаких дальнейших событий, связанных с этим касанием.

Итак... хитрость заключается в том, чтобы либо обработать событие TouchDown в вашем TextBox... или, что еще лучше, просто использовать элемент управления SurfaceTextBox, который сделает это за вас (и другие вещи, которые помогут с прикосновением). То же самое касается Button/SurfaceButton и многих других стандартных элементов управления. Как правило, используйте версии элементов управления Surface, когда они существуют.

person Robert Levy    schedule 31.08.2011
comment
Это гениально - спасибо! Это действительно работает. Теперь мне просто нужно применить правильные стили, и все должно быть хорошо. Очень полезное объяснение, почему это происходит - спасибо! - person Matt Winward; 31.08.2011