【问题标题】:PropertyChangedTrigger in WP8 not workingWP8 中的 PropertyChangedTrigger 不起作用
【发布时间】: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 已被继承。

标签: c# xaml windows-phone-7 windows-phone-8


【解决方案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));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多