我正在一个没有触摸的工作站上开发触控应用程序。我已经设置了一个滑动操作来在我的应用程序中前进和后退。问题是现在按钮不会点击。有没有办法在页面级别进行操作,仍然可以正确执行按钮命令?
private void OnElementManipulationStarting(object sender, ManipulationStartingEventArgs e)
{
e.ManipulationContainer = (sender as FrameworkElement);
}
答案 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 处理程序。