Silverlight 4.0 使用Blend在Silverlight 4的ActionState/Transition上设置计时器

Silverlight 4.0 使用Blend在Silverlight 4的ActionState/Transition上设置计时器,silverlight-4.0,blend,Silverlight 4.0,Blend,我是一名开发人员,最近下载了Blend试用版,我正在努力解决不使用CodeBehind来做事情的问题——这很酷,但它有一个相当好的学习曲线 我从这些开始,并根据我电脑上的示例在菜单上实现了一些简单的动画。我现在想做的是使菜单转换只在20秒后开始-即,使左侧的菜单在MouseLeave上消失(参见上面的链接)-只在鼠标离开后20秒开始转换(如果鼠标再次滑过,则取消)。这将使菜单停留更长时间,以防它们意外滑落 我确信它在Blend中确实很简单,但我正在努力寻找任何合适的文档——我很高兴RTFM——我

我是一名开发人员,最近下载了Blend试用版,我正在努力解决不使用CodeBehind来做事情的问题——这很酷,但它有一个相当好的学习曲线

我从这些开始,并根据我电脑上的示例在菜单上实现了一些简单的动画。我现在想做的是使菜单转换只在20秒后开始-即,使左侧的菜单在MouseLeave上消失(参见上面的链接)-只在鼠标离开后20秒开始转换(如果鼠标再次滑过,则取消)。这将使菜单停留更长时间,以防它们意外滑落

我确信它在Blend中确实很简单,但我正在努力寻找任何合适的文档——我很高兴RTFM——我只需要知道从哪里开始寻找(我在谷歌上搜索了“Blend timer stateaction”,没有任何乐趣)


谢谢你的提示

如果我正确理解您的问题:

  • 当您的侧菜单上出现鼠标输入事件时,它会显示动画(例如“ShowMenuStoryboard”)
  • 然后,您希望“HidementUstoryBoard”将菜单滑回,但仅在触发(由MouseLeave事件触发)20秒后才开始更改,但如果后续的Mouse Enter事件触发,则需要取消更改
  • 您希望在没有代码隐藏逻辑的情况下完成所有这些
有两件事要做

  • 确保故事板仅指定结束状态值(无开始状态)和
  • 您只需在XAML中为HideStoryboard设置BeginTime=“0:0:20”,例如

  • 我在Expression blend编辑器中的任何地方都没有找到BeginTime的属性,因此这必须在XAML视图中完成。这些属性仅显示自动翻转和重复行为

    这种动画有一个固有的问题,但对于您的示例来说应该是可以的。持续时间是固定的,因此,如果在一个动画开始时触发相反的动画,它将实际以更慢的速度动画到其最终位置,因为从“当前位置”到最终位置需要固定的时间

    希望这有帮助。带有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>
    

    您可以添加一个“假”故事板,作为第二个动画的触发器。 你需要两层木板。假冒伪劣。 你需要控制情节提要动作来启动它们。 第一个将有一个事件触发器(鼠标移出)。
    第一个将有一个StoryboardCompleterTrigger链接到“假”动画

    若你们还并没有看到行为、触发器和动作,工具箱里有一些很好的教程。见[工具箱学校][1]第一节。您可以在Blend的资产面板中找到它们,然后开始使用它们。它们使用起来很简单,只是开始玩它们的问题。[1] 当前位置谢谢米格尔-我看过那些教程(这就是我对不同州的想法来源——但我现在已经研究了故事板和动画,这很酷!啊,这正是我想要的——我读了故事板动画,现在一切都有意义了——感谢这个伟大的例子。一些问题:在我的例子中——我使用了两种不同的“州”并使用触发器将一个激活到另一个。在您的示例中,您使用SB并更改X位置来移动它-我只使用状态,因为这是混合教程的开始-您可以使用故事板以某种方式在状态之间转换吗?在这种方法中,您将在何处使用状态?谢谢您的帮助!您好,这是另一种方法循环:通过控件中的逻辑或外部行为(如GoToStateAction行为)在状态之间转换。故事板只是为了在控件的各种状态之间提供良好的过渡。您应该能够在过渡中插入开始时间,但不确定是否会看到您的示例。如果您希望修复特定的示例,您可以始终通过我们的网站与我们联系。(我现在将添加一个WP联系人页面)。干杯