【问题标题】:Is Databinding or TemplateBinding supported within the VisualStateManager?VisualStateManager 中是否支持 Databinding 或 TemplateBinding?
【发布时间】:2014-10-21 22:16:44
【问题描述】:

我正在尝试根据绑定值延迟自定义控件的动画。在下面的示例中,我希望动画在“SelectedAndHit”视觉状态被选中 5 秒后开始。但是,似乎无法在 VisualStateManage 中使用模板绑定。

VisualStateManager 中是否支持 TemplateBinding?有什么解决办法吗?

<local:ButtonEx x:Name="Button01" AnimationBeginTime="00:00:05" />

public TimeSpan AnimationBeginTime
{
    get { return (TimeSpan)base.GetValue(ButtonEx.AnimationBeginTimeProperty); }
    set { base.SetValue(ButtonEx.AnimationBeginTimeProperty, value); }
}

public static readonly DependencyProperty AnimationBeginTimeProperty =
   DependencyProperty.Register("AnimationBeginTime", typeof(TimeSpan), typeof(ButtonEx), new PropertyMetadata(TimeSpan.Zero));

<Style TargetType="local:ButtonEx">
    <!-- ... -->

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:ButtonEx">
                <Grid x:Name="Container" RenderTransformOrigin="0.5, 0.5">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal" />
                            <VisualState x:Name="SelectedAndHit">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Border" 
                                                                   Storyboard.TargetProperty="Background">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonBackgroundColorSelectedAndHit}" />
                                    </ObjectAnimationUsingKeyFrames>

                                    <Storyboard>
                                        <DoubleAnimation
                                            Storyboard.TargetName="GridScaleTransform"
                                            Storyboard.TargetProperty="(ScaleTransform.ScaleX)"
                                            To="1.2" BeginTime="{TemplateBinding AnimationBeginTime}" Duration="00:00:00.300" AutoReverse="True">
                                            <DoubleAnimation.EasingFunction>
                                                <ExponentialEase EasingMode="EaseIn" />
                                            </DoubleAnimation.EasingFunction>
                                        </DoubleAnimation>

                                        <DoubleAnimation
                                            Storyboard.TargetName="GridScaleTransform"
                                            Storyboard.TargetProperty="(ScaleTransform.ScaleY)"
                                            To="1.2" BeginTime="{TemplateBinding AnimationBeginTime}" Duration="00:00:00.300" AutoReverse="True">
                                            <DoubleAnimation.EasingFunction>
                                                <ExponentialEase EasingMode="EaseIn" />
                                            </DoubleAnimation.EasingFunction>
                                       </DoubleAnimation>
                                    </Storyboard>
                                </Storyboard>
                            </VisualState>

                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>

                    <Grid.RenderTransform>
                        <ScaleTransform x:Name="GridScaleTransform" />
                    </Grid.RenderTransform>

                    <!-- ... -->
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

【问题讨论】:

    标签: c# xaml windows-runtime win-universal-app


    【解决方案1】:

    我确认 WinRT 不支持样式内的绑定/模板绑定。为了解决这个问题,我编写了代码来手动更新情节提要的 BeginTime。这样我就可以完全控制情节提要何时开始。

    【讨论】:

      【解决方案2】:

      我会看Interactivity。我个人将 EventTrigger 与GoToStateAction 一起使用,这对我的目的来说已经足够了。从查看 MSDN 看起来您可以使用 TimerTrigger 和 GoToStateAction 来创建您正在寻找的效果。 TimerTrigger 具有用于设置动作延迟触发的依赖属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-07
        • 2019-10-07
        • 2011-03-16
        • 1970-01-01
        • 2015-11-22
        • 2018-06-13
        • 2014-11-10
        • 1970-01-01
        相关资源
        最近更新 更多