SurfaceScrollViewer: прикосновение к вложенным детям - PullRequest
2 голосов
/ 15 ноября 2011

У меня есть следующий фрагмент кода, который является частью WPF 4 UserControl:

<Popup x:Name="CantoPopup" IsOpen="False" PlacementRectangle="50,-100,500,120" 
               AllowsTransparency="True" PopupAnimation="Fade" 
               StaysOpen="True" Width="500" Height="120">
            <Border BorderBrush="#FF120403" BorderThickness="1" CornerRadius="10" Background="#FF9350">
                <s:SurfaceScrollViewer x:Name="IndexScroller" Width="500" Height="120" Margin="10" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Visible">
                    <DockPanel x:Name="InnerIndexPanel" />
                </s:SurfaceScrollViewer>
            </Border>
        </Popup>

DockPanel затем заполняется в коде позади коллекцией TextBlocks.По сути, я пытаюсь создать прокручиваемый горизонтальный список объектов, которые можно трогать.

Теперь я хотел бы определить, какой текстовый блок был затронут пользователем.Однако ни добавление обработчика событий TouchDown в TextBlocks, ни использование TouchExtensions для обработки жестов касания не работали.Может кто-нибудь, пожалуйста, укажите мне в правильном направлении?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Под обложками Popup создает другой hwnd для рендеринга своего контента. Это отличается от всех других элементов управления WPF. Вам необходимо зарегистрировать этот hwnd в Surface SDK, чтобы он начал отправлять сенсорные события на него. Используйте это, чтобы сделать это: http://msdn.microsoft.com/en-us/library/microsoft.surface.presentation.input.touchextensions.enablesurfaceinput.aspx

0 голосов
/ 17 ноября 2011

Я обнаружил, что дело в том, что у компонента Popup есть некоторые особенности :) В этом случае кажется, что он не обнаружил ни событий TouchDown, ни PreviewTouchDown. Поэтому я прибегнул к созданию UserControl из Canvas, содержащего приведенный выше код, а затем сделал такой элемент управления видимым поверх остальных, когда мне нужно было открыть всплывающее окно. Я не знаю, является ли это лучшим решением, но теперь оно реагирует, как и ожидалось.

...