故事板不能正常工作

问题描述:

我想按照由随机数确定的角度来旋转箭头。 箭头角度确实会改变,但动画不起作用。故事板不能正常工作

<Grid> 
     <ed:BlockArrow x:Name="blockArrow" Fill="Black" HorizontalAlignment="Left" Height="13.299" Orientation="Left" Stroke="Black" VerticalAlignment="Top" Width="100" Margin="84.571,165.951,0,0" RenderTransformOrigin="1,0.5"> 

      <ed:BlockArrow.RenderTransform> 
       <TransformGroup> 
        <ScaleTransform/> 
        <SkewTransform/> 
        <RotateTransform x:Name="ArrowTransform" Angle="{Binding ElementName=MeterValueTextBox, Path=Text}" /> 
         <TranslateTransform/> 
       </TransformGroup> 
      </ed:BlockArrow.RenderTransform> 
     </ed:BlockArrow> 
     <Ellipse Fill="Black" HorizontalAlignment="Left" Height="25" Stroke="Black" VerticalAlignment="Top" Width="25" Margin="172.865,159.568,0,0"/> 
     <TextBlock 
      Text="Type value:" 
      FontSize="16" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      Margin="57.976,245.873,0,0" 
      /> 
     <TextBox 
      x:Name="MeterValueTextBox" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      Width="100" 
      Margin="140,245.873,0,0" 
      Text="{Binding Meter, UpdateSourceTrigger=PropertyChanged}" 
      > 
      <TextBox.Triggers> 
       <EventTrigger RoutedEvent="TextBox.TextChanged"> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation 
           Storyboard.TargetName="ArrowTransform" 
           Storyboard.TargetProperty="(RotateTransform.Angle)" 
           From="{Binding OldMeterValue}" To="{Binding Meter}" Duration="0:0:0:1" 
           /> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </TextBox.Triggers> 
     </TextBox> 
    </Grid> 

和视图模型是:

public class MainViewModel : ViewModelBase 
{ 
    private float _meter; 

    public float Meter 
    { 
     get { return _meter; } 
     set 
     { 
      if (!Equals(_meter, value)) 
      { 
       OldMeterValue = _meter; 
       _meter = value; 
       OnPropertyChanged(); 
      } 
     } 
    } 

    private float _oldMeterValue; 

    public float OldMeterValue 
    { 
     get { return _oldMeterValue; } 
     set 
     { 
      if (_oldMeterValue != value) 
      { 
       _oldMeterValue = value; 
       OnPropertyChanged(); 
      } 
     } 
    } 
    public MainViewModel() 
    { 
     DisplayName = "Benchmark Application"; 

     OldMeterValue = 0; 
     Meter = 0; 

     var meterTimer = new Timer 
      { 
       Interval = 1000 
      }; 
     meterTimer.Elapsed += MeterTimerOnElapsed; 
     meterTimer.Start(); 
    } 

    private void MeterTimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs) 
    { 
     var randomNumber = new Random(); 
     var meterValue = randomNumber.Next(0, 180); 

     Meter = meterValue; 

    } 
} 

至于现在,从旧值新的价值,但没有动画箭头反弹。 请帮助...动画的enter image description here

+0

我与@ har07你'Duration'太短,但我同意还建议您尝试从DoubleAnimation中删除“From =”{Binding OldMeterValue}“'部分。 – Sheridan

Duration财产似乎太快了(一个milisecond ??)。尝试将它设置为一个更大的价值,使之明显,比如5秒:

<DoubleAnimation 
    Storyboard.TargetName="ArrowTransform" 
    Storyboard.TargetProperty="(RotateTransform.Angle)" 
    From="{Binding OldMeterValue}" To="{Binding Meter}" Duration="0:0:5" 
    /> 

[Reference]

+0

不...仍然弹跳... – kaycee