画布操作事件直到第一次尝试后才开始

Der*_*erd 5 c# xaml canvas swipe windows-phone-8

我正试图通过使用'ManipulationDelta`滑动来制作画布动画.问题很简单.当我运行应用程序时,唯一一次没有触发操作事件是第一次尝试.如果我在画布中的任何位置点击(或滑动)一次,那么第二次它会工作,直到重新启动应用程序.

这是我的XAML代码:

<Canvas Name="rootCanvas" Style="{StaticResource rootCanvas}" Hold="rootCanvas_Hold" ManipulationDelta="rootCanvas_ManipulationDelta" ManipulationCompleted="rootCanvas_ManipulationCompleted">
    <Canvas.Resources>
        <Storyboard x:Name="menuAnimation">
            <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="rootAnimation" d:IsOptimized="True" />
        </Storyboard>
    </Canvas.Resources>
    <Canvas Name="rootAnimation">
        <Grid x:Name="rootContainer" DataContext="{Binding}" Style="{StaticResource rootContainer}">
            ...
        </grid>
    </Canvas>
</Canvas>
Run Code Online (Sandbox Code Playgroud)

这是我在C#中的代码

private void rootCanvas_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
    if (e.DeltaManipulation.Translation.X > 25 && !menu.IsMenuOpen())
    {
        MoveViewWindow(150);
        hintActive = false;
        menu.SetMenuOpen();
        return;
    }
    else if (e.DeltaManipulation.Translation.X < (-25) && menu.IsMenuOpen())
    {
        MoveViewWindow(0);
        hintActive = false;
        menu.SetMenuClosed();
        return;
    }
}

private void rootCanvas_Hold(object sender, System.Windows.Input.GestureEventArgs e)
{
    if (!menu.IsMenuOpen())
    {
        hintActive = true;
        MoveViewWindow(25);
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

我有一个rootCanvas_ManipulationCompleted地方的断点被击中,即使在ManipulationDelta和保持断点都没有.

有任何想法吗?

小智 1

尝试以下命令:

rootCanvas.Focus();
Run Code Online (Sandbox Code Playgroud)

这会将焦点设置到您正在点击的画布上,只需在页面的加载方法中弹出此事件即可。