如果我正确理解您的问题:
- 当您在侧边菜单上获得 Mouse Enter 事件时,它会显示动画(例如“ShowMenuStoryboard”)。
- 然后,您希望“HideMenuStoryboard”将菜单向后滑动,但仅在触发(由 MouseLeave 事件)触发 20 秒后才开始更改,但如果随后的 Mouse Enter 事件触发,则需要将其取消。
- 你想在没有代码隐藏逻辑的情况下完成这一切。
有 2 件事要做。
- 确保您的故事板仅指定结束状态值(无起始状态)和
您只需要在 XAML 中为 HideStoryboard 设置 BeginTime="0:0:20" 例如
<Storyboard x:Name="HideMenuStoryboard" BeginTime="0:0:20" >
我在表达式混合编辑器中的任何地方都没有找到 BeginTime 的属性,因此必须在 XAML 视图中完成。属性仅显示 AutoReverse 和 RepeatBehavior。
这种动画存在固有问题,但对于您的示例应该没问题。持续时间是固定的,所以如果你在一个开始时触发相反的动画,它实际上会更慢地动画到它的最终位置,因为它需要一个固定的时间才能“从它当前的位置”到最终位置。
希望这可以帮助。下面是带有 memu 菜单的完整示例 MainPage.XAML。它只需要 2 个故事板和故事板控制行为:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
x:Class="SilverlightApplication1.MainPage"
mc:Ignorable="d">
<UserControl.Resources>
<Storyboard x:Name="ShowMenuStoryboard">
<DoubleAnimation Duration="0:0:0.5" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"/>
</Storyboard>
<Storyboard x:Name="HideMenuStoryboard" BeginTime="0:0:20">
<DoubleAnimation Duration="0:0:0.5" To="-100" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"/>
</Storyboard>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel x:Name="stackPanel" HorizontalAlignment="Left" Orientation="Vertical" Width="150" d:LayoutOverrides="Height" RenderTransformOrigin="0.5,0.5" Background="#FF646CE7">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeave">
<ei:ControlStoryboardAction Storyboard="{StaticResource HideMenuStoryboard}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseEnter">
<ei:ControlStoryboardAction Storyboard="{StaticResource ShowMenuStoryboard}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<StackPanel.RenderTransform>
<CompositeTransform TranslateX="-100"/>
</StackPanel.RenderTransform>
<StackPanel.Projection>
<PlaneProjection/>
</StackPanel.Projection>
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>
<TextBlock TextWrapping="Wrap" Text="TextBlock"/>
</StackPanel>
</Grid>
</UserControl>