我能够使用这种技术来做我想做的事,即在隐藏滑入和滑出窗口的控件时防止向后导航。默认情况下,控件的可见性是折叠的。故事板用于控制何时可见或折叠。在 XAML 中,Storyboard 内部:
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ControlScroller" Storyboard.TargetProperty="(UIElement.Visibility)">
<ObjectAnimationUsingKeyFrames.KeyFrames>
<DiscreteObjectKeyFrame KeyTime="00:00:00">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames.KeyFrames>
然后在页面的代码中:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
if(ControlScroller.Visibility == Visibility.Visible && StoryboardHideControlSlider.GetCurrentState() != ClockState.Active)
{
StoryboardHideControlSlider.Begin();
ContentGrid.IsHitTestVisible = true;
e.Cancel = true;
}
}
注意:在隐藏 ContentScroller(它是一个网格)的 Storyboard 中,KeyTime 设置为“00:00:01”,因为我希望它在滑动(和淡出)视野时保持可见。
注意 2:原因 StoryboardHideControlSlider.GetCurrentState() != ClockState.Active
包含在 if 语句中是因为如果用户按两次后退按钮并且情节提要尚未完成,它将再次运行。这可以防止后退按钮取消导航回到上一页。换句话说,如果 Storyboard 处于活动状态,代码“知道”用户已经开始隐藏它并打算导航回上一页。(嗯,至少这是他们会得到的行为......他们不会看到动画两次)!