Como combinar manipuladores de eventos de toque e mouse sem produzir comportamento duplicado?

Estou trabalhando em um aplicativo WPF que está sendo usado em um tablet com tela de toque. Desenvolvo usando o IDE VS2015 e uso o Mouse para depurar.

Eu devo lidar com botões 'down eup eventos para executar determinadas tarefas. eu usoPreviewMouse ePreviewTouch manipuladores de eventos e eu tenho um problema em todos os casos que eu uso:

Caso 1: UsandoPreviewMouseDown,PreviewMouseUp,PreviewTouchDown ePreviewTouchUp. Para cada botão, preciso duplicar meu código para incluir manipuladores de eventos de toque e mouse separadosmas exatamente a mesma funcionalidade. Faço isso para poder usar o Aplicativo (Mouse) e para o usuário usá-lo (Toque).Problema: Touch Event Handlers executa Mouse Event Handlers; Fazendo com que o aplicativo duplique o comportamento. Ex: um botão que incrementax por um, será incrementado por um se você "clicar" nele, mas incrementado por dois se você "tocar" nele.

Caso 2: UsandoClick, PreviewMouseUp ePreviewTouchUp. Problema: oPreviewTouchUp ePreviewMouseUp não seja chamadoClique do mouse.

Caso 3: Crie um método para cada botão e chame-o de eventos do Touch e Mouse, comoComo obter a tela sensível ao toque para usar os eventos do mouse. Problema: Comportamento duplicado (o método é chamado duas vezes)

Caso 4: Remova todos os eventos do Touch desdePreviewMouseDown ePreviewMouseUp estão sendo executados em qualquer Touch. O comportamento funciona, mas preciso tocar em determinadas posições do botão para que ele seja executado. (Transparência? Preciso tocar exatamente em uma posição - como um mouse?)

Caso 5: UsandoMouseUp eMouseDown ao invés dePreview. Não funcionou no Touch, tocando em qualquer posição do botão.

Eu quero algo parecido com issoImpedir que um aplicativo WPF interprete eventos de toque como eventos do mouse mas apenas no tablet. Ainda preciso usar o mouse no meu ambiente. Como posso consertar isso?

Exemplo de botão XAML:

<Button x:Name="locationScrollUpButton" Margin="0,5,5,0" Background="Transparent" Padding="0" Grid.Row="1" Grid.Column="1" PreviewMouseUp="locationScrollUpButton_PreviewMouseUp" PreviewMouseDown="locationScrollUpButton_PreviewMouseDown" BorderThickness="0" PreviewTouchDown="locationScrollUpButton_PreviewTouchDown" PreviewTouchUp="locationScrollUpButton_PreviewTouchUp" >
    <StackPanel>
        <TextBlock x:Name="locationUpButtonText" Text="Up" FontSize="13" Margin="0,2,0,4" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        <Image x:Name="locationUpButtonImage" Source="/ProjectName;component/Resources/CaptureView/Location-Scroll-Up-White.png" Width="55" Height="60"/>
    </StackPanel>
</Button>

questionAnswers(2)

yourAnswerToTheQuestion