如果我理解正確的話您的問題:
- 當你得到一個鼠標放在你身邊的菜單中輸入事件時,從動畫(如「ShowMenuStoryboard」)。
- 然後,您希望「HideMenuStoryboard」將菜單滑回,但只有在觸發後(通過MouseLeave事件發生)纔開始更改20秒,但如果後續的Mouse Enter事件觸發,則需要取消它。
- 你想要做所有這些都沒有代碼隱藏邏輯。
有2件事情要做。
- 確保你的故事板只有指定的結束狀態值(不含起始狀態)和
你只需要設置的BeginTime =「0:0:20」中的XAML的HideStoryboard例如
<故事板X:NAME = 「HideMenuStoryboard」 的BeginTime = 「0:0:20」 >
我還沒有找到的BeginTime在Expression Blend中編輯的任何位置的屬性,所以這在XAML視圖中完成。這些屬性僅顯示AutoReverse和RepeatBehavior。
這種動畫存在固有的問題,但應該適用於您的示例。持續時間是固定的,所以如果您在開始時觸發相反的動畫,則實際上動畫會更緩慢地移動到最終位置,因爲需要一段固定的時間才能從「當前位置」移動到最終位置。
希望這會有所幫助。下面是帶有菜單菜單的完整示例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>
嗯,那就是我正在尋找的東西 - 我讀了Storyboard動畫,現在這一切都很有意義 - 感謝這個偉大的例子。 一些問題: 所以在我的例子中 - 我使用2個不同的「國家」,並使用觸發器來激活一個到另一個。在你的例子中,你使用SB並改變X的位置來移動它 - 我只使用狀態,因爲這是Blend教程的開始 - 你可以使用Storyboard在不同的狀態之間切換狀態嗎?你會在哪些地方使用這個方法? 感謝您的幫助! – Rodney 2010-08-19 09:02:43
您好,這是另一種方式:您可以通過控件中的邏輯或通過外部行爲(如GoToStateAction行爲)在狀態之間轉換。故事板只是爲了在各種控制狀態之間提供良好的轉換。您應該能夠將開始時間插入到轉換中,但不能確定沒有看到您的示例。如果您想要修正某個特定示例,您可以隨時通過我們的網站與我們聯繫。 (我現在將添加一個WP聯繫人頁面)。歡呼 – 2010-08-19 16:27:48