操纵事件使按钮停止工作

时间:2014-04-15 16:12:18

标签: wpf touch

我正在一个没有触摸的工作站上开发触控应用程序。我已经设置了一个滑动操作来在我的应用程序中前进和后退。问题是现在按钮不会点击。有没有办法在页面级别进行操作,仍然可以正确执行按钮命令?

    private void OnElementManipulationStarting(object sender, ManipulationStartingEventArgs e)
    {
        e.ManipulationContainer = (sender as FrameworkElement);
    }

2 个答案:

答案 0 :(得分:0)

这有点复杂。看起来当激活操作时,按钮会收到TouchDown事件,但是当操纵窃取时,TouchDevices TouchUp永远不会触发按钮。

我找到的解决方案是在按钮控件上附加一个特定的行为,该行为将在操作开始时捕获设备:

public class ForceCaptureBehavior: Behavior<FrameworkElement>
{

    protected override void OnAttached()
    {
        base.OnAttached();

        AssociatedObject.TouchDown += OnTouchDown;
    }

    void OnTouchDown(object sender, TouchEventArgs e)
    {
        e.TouchDevice.Capture(AssociatedObject);
        e.Handled = true;
    }

}

现在您的按钮将如下所示:

<s:SurfaceButton Content="Click!" Width="200" Height="150" Click="Button_Click">
    <i:Interaction.Behaviors>
        <local:ForceCaptureBehavior/>
    </i:Interaction.Behaviors>
</s:SurfaceButton>

您需要将Windows.System.Interactivity和Microsoft.Expression.Interactions程序集添加到项目中。

答案 1 :(得分:0)

对于今天尝试解决此类问题的任何人... 在您的操作处理程序中,如 OnManipulationCompleted,如果您决定没有实际操作,因为例如 e.TotalManipulation.Translation.X 太小而不能滑动,则调用 e.Cancel()并且将调用普通的 Button 处理程序。