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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章