none
ContextMenu的Style动画问题 RRS feed

  • 问题

  • <Style TargetType="{x:Type ContextMenu}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ContextMenu}">
                            <Border x:Name="Border" CornerRadius="4" Background="#FFFAFAFA"  BorderThickness="1" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
                                <Border.BorderBrush>
                                    <SolidColorBrush Color="#BABABA" />
                                </Border.BorderBrush>
                                <ItemsPresenter/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="IsMouseOver" Value="True"/>
                                    </MultiTrigger.Conditions>
                                    <MultiTrigger.EnterActions>
                                        <BeginStoryboard>
                                            <Storyboard>
                                                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"  Storyboard.TargetProperty="(FrameworkElement.Width)">
                                                    <SplineDoubleKeyFrame KeyTime="00:00:00.0020000" Value="0"/>
                                                    <SplineDoubleKeyFrame KeyTime="00:00:00.3450000" Value=""/>
                                                </DoubleAnimationUsingKeyFrames>
                                                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"  Storyboard.TargetProperty="(FrameworkElement.Height)">
                                                    <SplineDoubleKeyFrame KeyTime="00:00:00.0020000" Value="0"/>
                                                    <SplineDoubleKeyFrame KeyTime="00:00:00.3450000" Value=""/>
                                                </DoubleAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </MultiTrigger.EnterActions>
                                </MultiTrigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
    如上一个style,在动画部分,要变化宽和高,值要怎么指定?用{Templatebinding Width}报错
    2012年7月18日 1:26

答案

  • 动画中不能用绑定来指定你要的动画的值,过度值也好,目标值也好 都是不可以在动画开始后改变的。 道理很好理解,你的动画一旦开始,中间的插值都已经计算好了,如果你在改变,那么会使得之前计算的数据出错,动画就无法正常完成 ,所以 动画一开始,对象就会被冻结。 所以你这里的 SplineDoubleKeyFrame 的Value只能硬编码一个数据进去,不能够用绑定。


    Kee Poppy [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 猪宝贝 2012年7月19日 1:28
    2012年7月18日 8:15
    版主