直到第一次尝试后才触发画布操作事件

Posted

技术标签:

【中文标题】直到第一次尝试后才触发画布操作事件【英文标题】:Canvas manipulation event not firing until after first try 【发布时间】:2014-07-07 05:54:34 【问题描述】:

我正在尝试通过使用“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>

这是我的 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;

我有一个rootCanvas_ManipulationCompleted,即使 ManipulationDelta 和 Hold 断点没有,也会触发断点。

有什么想法吗?

【问题讨论】:

只是猜测:可能是焦点问题,您是否尝试过在代码中将焦点设置到画布上一次,看看是否能解决问题? @robbievercammen 你解决了这个问题吗? @JTIM,抱歉,我无法再访问此代码了。我记得玩过操纵事件。我唯一记得的是,这段代码有效。这是一个小问题让动画变得混乱。 【参考方案1】:

试试命令:

rootCanvas.Focus();

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

【讨论】:

以上是关于直到第一次尝试后才触发画布操作事件的主要内容,如果未能解决你的问题,请参考以下文章

iOS解决按钮短时间内多次点击只触发一次事件方法

JS篇(防抖/节流)

js前端性能优化之函数节流和函数防抖

RxSwift 跳过事件直到自己的序列完成

直到第二次单击(vb6),按钮事件才显示值

React中事件节流防抖