直到第一次尝试后才触发画布操作事件
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();
这会将焦点设置到您正在点击的画布上,只需在页面的加载方法中弹出此事件即可。
【讨论】:
以上是关于直到第一次尝试后才触发画布操作事件的主要内容,如果未能解决你的问题,请参考以下文章