Отключить обработку сенсорных событий InkCanvas в UWP

У меня есть InkCanvas поверх моего приложения. Я хочу, чтобы он взаимодействовал только с событиями Stylus/Pen. Все остальные события должны передаваться различным элементам управления под холстом. Намерение состоит в том, что я определяю жесты на InkCanvas с помощью пера, в то время как другие события манипуляции обрабатываются элементами управления под InkCanvas (такими как касание и инерционная манипуляция).

В настоящее время я пытался отключить события манипуляции, захватить их, установить handled = false. Пока не могу найти правильного решения. Любые идеи?


person JoshG    schedule 03.08.2016    source источник
comment
Я не могу найти правильное решение. Было бы полезно узнать, что именно не так с вашим решением.   -  person IInspectable    schedule 03.08.2016


Ответы (1)


Вы можете определить режим ввода (PointerDeviceType) в Pointer событиях InkCanvas, например:

<ScrollViewer x:Name="scrollViewer" Width="400" Height="400" Background="LightBlue" VerticalAlignment="Center" HorizontalAlignment="Center"
              PointerPressed="scrollViewer_PointerPressed">
    <StackPanel>
        <Rectangle Height="300" Width="300" Fill="Red"/>
        <Rectangle Height="300" Width="300" Fill="Black"/>
    </StackPanel>
</ScrollViewer>
<InkCanvas x:Name="inkCanvas" Width="400" Height="400" GotFocus="inkCanvas_GotFocus" VerticalAlignment="Center" HorizontalAlignment="Center"
           Tapped="inkCanvas_Tapped" PointerPressed="inkCanvas_PointerPressed"/>

код позади:

private void inkCanvas_PointerPressed(object sender, PointerRoutedEventArgs e)
{
    // Accept input only from a pen or mouse with the left button pressed.
    PointerDeviceType pointerDevType = e.Pointer.PointerDeviceType;
    if (pointerDevType == PointerDeviceType.Pen)
    {
        //TODO:
    }
    else
    {
        // Process touch or mouse input
        inkCanvas.Visibility = Visibility.Collapsed;
    }
}

private void scrollViewer_PointerPressed(object sender, PointerRoutedEventArgs e)
{
    PointerDeviceType pointerDevType = e.Pointer.PointerDeviceType;
    if (pointerDevType == PointerDeviceType.Pen)
    {
        inkCanvas.Visibility = Visibility.Visible;
    }
    else
    {
        // Process touch or mouse input
        inkCanvas.Visibility = Visibility.Collapsed;
    }
}
person Grace Feng    schedule 04.08.2016