与 Storyboard 的交互行为和 DataTrigger 不起作用

我正在开发 UWP 应用程序,并且正在尝试实施 MVVM 方法。基本上,当 Binding 的值在运行时发生变化时,我试图运行 Storyboard。

到目前为止,我想出了以下内容:

<UserControl

    ...

    xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"

    xmlns:Core="using:Microsoft.Xaml.Interactions.Core"

    xmlns:Media="using:Microsoft.Xaml.Interactions.Media">


    <UserControl.Resources>

        <Storyboard x:Name="cValueSB" AutoReverse="True" RepeatBehavior="3">

            <DoubleAnimation To="0" Duration="0:0:0.5" Storyboard.TargetName="cvalue" Storyboard.TargetProperty="(UIElement.Opacity)"/>

        </Storyboard>

        <Storyboard x:Name="hValueSB" AutoReverse="True" RepeatBehavior="3">

            <DoubleAnimation To="0" Duration="0:0:0.5" Storyboard.TargetName="hvalue" Storyboard.TargetProperty="(UIElement.Opacity)"/>

        </Storyboard>

        <Storyboard x:Name="lValueSB" AutoReverse="True" RepeatBehavior="3">

            <DoubleAnimation To="0" Duration="0:0:0.5" Storyboard.TargetName="lvalue" Storyboard.TargetProperty="(UIElement.Opacity)"/>

        </Storyboard>

        <Storyboard x:Name="nValueSB" AutoReverse="True" RepeatBehavior="3">

            <DoubleAnimation To="0" Duration="0:0:0.5" Storyboard.TargetName="nvalue" Storyboard.TargetProperty="(UIElement.Opacity)"/>

        </Storyboard>

    </UserControl.Resources>


    <Grid>

        <VisualStateManager.VisualStateGroups>

            <VisualStateGroup>

                <VisualState x:Name="large">

                    <VisualState.StateTriggers>

                        <AdaptiveTrigger MinWindowWidth="{StaticResource ScreenWidthSixForty}"/>

                    </VisualState.StateTriggers>


我面临的问题是,当 Binding 的值发生变化时,动画无法正常工作。除非绝对必要,否则我想尽可能避免任何直接代码隐藏。这甚至是正确的方法吗?我是 Xaml Behaviors 的新手,所以希望在实现它方面得到一些帮助。

如果有更完善的方法来实现上述目标,我很乐意知道。谢谢。


慕森卡
浏览 201回答 1
1回答

翻过高山走不出你

当行为绑定到的数据满足指定条件时,将触发 DataTriggerBehavior。您只是绑定到属性,但没有指定任何条件来触发此行为。基本上,当 Binding 的值在运行时发生变化时,我试图运行 Storyboard。根据您的要求,您需要添加ComparisonCondition="NotEqual",如果您有一个固定值与绑定属性值进行比较,您可以添加Value=xxx.<Interactivity:Interaction.Behaviors>&nbsp; &nbsp; <Core:DataTriggerBehavior Binding="{Binding CurrentValue, Mode=OneWay, UpdateSourceTrigger=Default}" ComparisonCondition="NotEqual">&nbsp; &nbsp; &nbsp; &nbsp; <Media:ControlStoryboardAction&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Storyboard="{StaticResource cValueSB}"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ControlStoryboardOption="Play"/>&nbsp; &nbsp; </Core:DataTriggerBehavior></Interactivity:Interaction.Behaviors>
打开App,查看更多内容
随时随地看视频慕课网APP