WPF按钮按下Windows 7多点触控

Jar*_*ipp 2 .net wpf touchscreen multi-touch windows-7

我正在开发一个类似客户端的WPF信息亭,它将部署在启用了多点触控的HP TouchSmart Windows 7机器上.我的问题是,使用Windows 7多点触控,应用程序无法将手指"点击"识别为按钮按下事件,因此按下触发器以更改颜色的按钮永远不会被触发.

通常会显示触摸的Windows 7动画,并且按钮单击事件会正常触发.只有"IsPressed"事件的XAML定义样式在手指点击时无法正常工作.如果用手指施加足够的压力和/或像指纹一样滚动或按压,它最终会起作用.是否有一种解决方法可以"点击"点击按下/点击事件?

<Trigger Property="AreAnyTouchesOver" Value="true">
    <Trigger.ExitActions>
        <BeginStoryboard Storyboard="{StaticResource PressedOff}" />
    </Trigger.ExitActions>
    <Trigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource PressedOn}" />
    </Trigger.EnterActions>
</Trigger>

<Trigger Property="AreAnyTouchesDirectlyOver" Value="true">
    <Trigger.ExitActions>
        <BeginStoryboard Storyboard="{StaticResource PressedOff}" />
    </Trigger.ExitActions>
    <Trigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource PressedOn}" />
    </Trigger.EnterActions>
</Trigger>
Run Code Online (Sandbox Code Playgroud)

Bra*_*ham 5

我不清楚你想做什么.

对您的问题的一些解释:

触摸IsPressed仅在您的触点被按住元素并且传递移动阈值以创建"按下"时触发(这就是为什么如果您按下手指并轻轻滑动它的原因)

一旦联系人出现IsPressed = false.

当您"点击"按钮时,您实际上是在单击鼠标.这就是事件按预期发射的原因.

那你到底想要做什么?当按下"按下"按钮("IsPressed")或单击按钮(轻触)时,您想要触发故事板动画.

这是两种不同的情况,同时注意到桌面隐喻通常不能很好地转换为触摸环境.您可能想要重新考虑如何向用户提供视觉反馈.

如果我正确理解你的问题,我认为对你想要的最简单的答案就是触发"TouchDown".

更新:

这适用于TouchDown触发器

<Button Content="Touch Down Example" Height="20" Width="20">
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.TouchDown">
                <BeginStoryboard>
                    ....
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>
Run Code Online (Sandbox Code Playgroud)

注意:我面前没有触摸屏,因此可能存在错误,但看起来是正确的.


Chr*_*sen 5

只需将Stylus.IsPressAndHoldEnabled附加属性设置False为按钮即可.这将导致按钮的IsPressed属性被设置/清除以响应触摸和鼠标单击.

UIElement.TouchDown事件的文档:

要在手指触摸屏幕时立即发生PreviewTouchDown和TouchDown事件,请将此元素的Stylus.IsPressAndHoldEnabled附加属性设置为false.

例如,您可以在按钮样式中使用setter来确保该属性设置为false:

<Setter Property="Stylus.IsPressAndHoldEnabled" Value="False"/>
Run Code Online (Sandbox Code Playgroud)

在尝试找到一种方法让我的按钮可靠地为鼠标点击和触摸事件设置动画时,我发现了这个问题.接受的答案让我失去了似乎错误的道路:将故事板与触摸上/下事件同步.IsPressed事实证明,使用两者的属性触发器既简单又可靠.希望这可以避免其他人犯同样的错误.