【问题标题】:Animate a StatusBarItem when its DataContext changes在 DataContext 更改时为 StatusBarItem 设置动画
【发布时间】:2014-01-03 23:45:58
【问题描述】:

我想在 StatusBarItem 的文本更新时为其设置动画,VisualState 很好,如果我在 MouseEnter 事件期间触发它,它就会播放;但是我无法在DataContextChanged 活动期间播放它。

<Window.Resources>
    <Color x:Key="ColorRed">Red</Color>
</Window.Resources>

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="VisualStateGroup">
        <VisualState x:Name="Animate">
            <Storyboard AutoReverse="True">
                <ColorAnimationUsingKeyFrames Storyboard.TargetName="StatusBarItem1" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
                    <EasingColorKeyFrame KeyTime="0:0:0.2" Value="{StaticResource ColorRed}" />
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

<StatusBarItem x:Name="StatusBarItem1" Content="{Binding TargetNullValue='Placeholder'}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="DataContextChanged">
            <ei:GoToStateAction StateName="Animate" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</StatusBarItem>

这就是我更新DataContext 的方式:

...
catch (Exception ex)
{
    var s = string.Format("Building preview for asset failed: {0}", ex.Message);
    StatusBarItem1.DataContext = s;
}

如果我听这个事件,它确实被称为:

StatusBarItem1.DataContextChanged += StatusBarItem1_DataContextChanged;
void StatusBarItem1_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
}

如何在StatusBarItem 文本更改时触发动画?

【问题讨论】:

    标签: c# wpf xaml blend


    【解决方案1】:

    参见this solution,这表明这需要在代码隐藏中完成,而不能在纯 XAML 中完成。问题并不完全相同,但同样的解决方案应该适用于您手动启动动画。

    【讨论】:

    • 我希望有一种更优雅的方法,但它确实有效,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    相关资源
    最近更新 更多