私があなたの問題を正しく理解している場合:
- サイドメニューでMouseEnterイベントを取得すると、アニメーション化されます(「ShowMenuStoryboard」など)。
- 次に、「HideMenuStoryboard」でメニューをスライドさせて元に戻しますが、(MouseLeaveイベントによって)トリガーされてから20秒後に変更を開始しますが、後続のMouseEnterイベントが発生した場合はキャンセルする必要があります。
- コードビハインドロジックを使用せずに、これらすべてを実行したいと考えています。
やるべきことは2つあります。
- ストーリーボードで終了状態の値のみを指定し(開始状態は指定しない)、
HideStoryboardのXAMLでBeginTime="0:0:20"を設定する必要があります。
<ストーリーボードx:Name = "HideMenuStoryboard" BeginTime = "0:0:20" >
Expression Blendエディターで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>