C# VisualStateManager是否支持数据绑定或模板绑定?

C# VisualStateManager是否支持数据绑定或模板绑定?,c#,xaml,windows-runtime,win-universal-app,C#,Xaml,Windows Runtime,Win Universal App,我试图根据绑定值延迟自定义控件的动画。在下面的示例中,我希望动画在选择“SelectedAndHit”视觉状态5秒后开始。但是,似乎不可能在VisualStateManager中使用模板绑定 VisualStateManager是否支持TemplateBinding?有什么解决办法吗 <local:ButtonEx x:Name="Button01" AnimationBeginTime="00:00:05" /> public TimeSpan AnimationBeginTim

我试图根据绑定值延迟自定义控件的动画。在下面的示例中,我希望动画在选择“SelectedAndHit”视觉状态5秒后开始。但是,似乎不可能在VisualStateManager中使用模板绑定

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>

公共时间跨度动画开始时间
{
获取{return(TimeSpan)base.GetValue(ButtonEx.AnimationBeginTimeProperty);}
set{base.SetValue(ButtonEx.AnimationBeginTimeProperty,value);}
}
公共静态只读DependencyProperty AnimationBeginTimeProperty=
DependencyProperty.Register(“AnimationBeginTime”、typeof(TimeSpan)、typeof(buttonnex)、newpropertyMetadata(TimeSpan.Zero));

我会看看。我个人使用过EventTrigger,这对于我来说已经足够了。从MSDN来看,您似乎可以使用TimerTrigger和GoToStateAction来创建所需的效果。具有用于将操作延迟设置为激发的依赖属性。

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