WP8 中的 PropertyChangedTrigger 不起作用

Posted

技术标签:

【中文标题】WP8 中的 PropertyChangedTrigger 不起作用【英文标题】:PropertyChangedTrigger in WP8 not working 【发布时间】:2015-11-07 14:39:52 【问题描述】:

我需要创建一个百分比加载器控件。我创建了一个两个 Arc 控件。一个弧用于背景,一个用于前景。我将给出结束角度作为 Arc 的输入。我写了一个双动画类来执行加载动画。当我试图在后面的代码中调用故事板时,动画就起作用了。

但我的要求是,每当属性发生变化时,我都需要加载加载器。所以我决定使用 PropertyChangedBehaviour。但是动画不起作用。请提出最好的方法来做到这一点'

这里是 xaml 代码:

<VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="ValueStates">
            <VisualState x:Name="On">
                <Storyboard x:Name="storyBoard2">
                    <DoubleAnimation Duration="0:0:9" To="270" Storyboard.TargetProperty="(Arc.EndAngle)" Storyboard.TargetName="TimerProgressBar">
                        <DoubleAnimation.EasingFunction>
                            <ExponentialEase EasingMode="EaseOut"/>
                        </DoubleAnimation.EasingFunction>
                    </DoubleAnimation>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
            <Grid Grid.Row="1"
                  Background="Transparent"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Top"
                  Margin="0 40 0 0">
                <i:Interaction.Triggers>
                    <ec:PropertyChangedTrigger Binding="Binding EndAngleValue">
                        <ec:GoToStateAction StateName="On"/>
                    </ec:PropertyChangedTrigger>
                </i:Interaction.Triggers>
                <es:Arc ArcThickness="1"
                        Fill="StaticResource OlaTextLightGrayBrush"
                        ArcThicknessUnit="Pixel"
                        Stretch="None"
                        Stroke="StaticResource OlaTextLightGrayBrush"
                        StartAngle="0"
                        EndAngle="360"
                        UseLayoutRounding="False"
                        Width="297"
                        Height="297" />

                <es:Arc ArcThickness="4"
                        Fill="StaticResource OlaGreenBrush"
                        x:Name="TimerProgressBar"
                        ArcThicknessUnit="Pixel"
                        Stretch="None"
                        StartAngle="0"
                        UseLayoutRounding="False"
                        Width="300"
                        Height="300" VerticalAlignment="Bottom" d:LayoutOverrides="Height" >

                    <es:Arc.Stroke>
                        <SolidColorBrush 
                            Color="StaticResource OlaGreen"/>
                    </es:Arc.Stroke>
                </es:Arc>

我的视图模型:

public double EndAngleValue
    
        get
        
            return _EndAngleValue;
        

        set
        
            SetProperty(ref _EndAngleValue, value);
        
    

每当“EndAngleValue”属性发生变化时,我都需要执行动画。

欢迎提出任何建议

【问题讨论】:

你在视图模型中实现INotifyPropertyChanged了吗? 您的VisualStateManager 是否定义在控件的根目录中? Yes 可视化状态管理器定义在根目录中。 是的 INotifyPropertyChanged 已被继承。 【参考方案1】:

如果你已经实现了,那么你应该能够做到这一点:

public double EndAngleValue

    get
    
        return _EndAngleValue;
    

    set
    
        SetProperty(ref _EndAngleValue, value);
        OnPropertyChanged("EndAngleValue");
    


private OnPropertyChanged(string propertyName)

    if(PropertyChanged != null)
    
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    

【讨论】:

以上是关于WP8 中的 PropertyChangedTrigger 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

WP8.1 文件选择器中的图像内置裁剪工具

.sdf 文件 wp7/wp8 中的多个表

WP8 中的 PropertyChangedTrigger 不起作用

WP8.1 如何在 C# 中取消后台音频任务

在 WP8 中从 C++ 代码调用 C# 方法

跟踪应用程序堆栈更改事件 wp8.1