【问题标题】:WPF routedevent storyboard begin only if height is zeroWPF routedevent 故事板仅在高度为零时开始
【发布时间】:2015-08-30 18:49:06
【问题描述】:

我有以下 XAML 用于使用路由事件的边框触发器

<Border.Triggers>
    <EventTrigger RoutedEvent="MouseLeftButtonUp" EnterActions="">
        <BeginStoryboard>
            <Storyboard>
                <ObjectAnimationUsingKeyFrames BeginTime="0" Duration="0:0:0.4" Storyboard.Target="{Binding ElementName=messageWriterDefinition}" Storyboard.TargetProperty="Height">
                    <DiscreteObjectKeyFrame >
                        <DiscreteObjectKeyFrame.Value>
                            <GridLength>20</GridLength>
                        </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                    ...
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Border.Triggers>

当点击边框和包含元素时触发此触发器,并且动画会导致目标动画从零高度打开到 200

触发器工作得很好,但每次边框收到事件时动画都会运行并且目标动画会再次打开(即使已经打开)

如何向触发器添加一个有效忽略动画的条件是目标的高度已经大于零?

【问题讨论】:

    标签: wpf storyboard wpf-controls routed-events


    【解决方案1】:

    您可以使用 DoubleAnimation 代替 ObjectAnimationUsingKeyFrames。通过仅设置其To 属性而不设置From,动画从当前属性值开始。它要求您还设置边框的Height 的初始值:

    <Border Height="20" ...>
        <Border.Triggers>
            <EventTrigger RoutedEvent="MouseLeftButtonUp">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Height"
                                         To="200" Duration="0:0:0.4"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Border.Triggers>
    </Border>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-16
      • 2011-01-03
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2013-01-19
      • 2012-01-11
      相关资源
      最近更新 更多