스토리 보드에는 기간에 대한 배율 인 SpeedRatio 설정이 있습니다. 그러나 종속성 속성이 아니기 때문에이 속성에 바인딩 할 수 없습니다.
이 문제를 해결하려면 스토리 보드에서 SetSpeedRatio 기능을 사용할 수 있습니다. 이 기능은 스토리 보드가 코드로 시작된 경우에만 작동합니다 (다른 오류가 발생하는 경우).
아래 코드는 회전하는 사각형의 애니메이션 속도를 높이기 위해 개체에서 이벤트를 발생시키는 방법의 전체 예제입니다. 텍스트 상자 및 데이터 바인딩의 목적은 백그라운드 개체를 업데이트하는 것입니다. 버튼은 텍스트 상자가 포커스를 잃어 버리고 객체를 업데이트하기위한 것입니다.
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<Rectangle Margin="50" Width="50" Height="50" Fill="Red" x:Name="rc">
<Rectangle.RenderTransform>
<RotateTransform x:Name="TransRotate"
CenterX="25" CenterY="25" Angle="0" />
</Rectangle.RenderTransform>
<Rectangle.Resources>
<Storyboard x:Key="spin">
<DoubleAnimation x:Name="da"
Storyboard.TargetName="TransRotate"
Storyboard.TargetProperty="Angle"
By="360"
Duration="0:0:10"
AutoReverse="False"
RepeatBehavior="Forever" />
</Storyboard>
</Rectangle.Resources>
</Rectangle>
<TextBox Text="{Binding Speed}" />
<Button>Update Speed</Button>
</StackPanel>
</Window>
그런 다음 C# 코드
{
public Window1()
{
InitializeComponent();
//create new object
BackgroundObject bo = new BackgroundObject();
//binding only needed for the text box to change speed value
this.DataContext = bo;
//Hook up event
bo.SpeedChanged += bo_SpeedChanged;
//Needed to prevent an error
Storyboard sb = (Storyboard)rc.FindResource("spin");
sb.Begin();
}
//Change Speed
public void bo_SpeedChanged( object sender, int newSpeed)
{
Storyboard sb = (Storyboard)rc.FindResource("spin");
sb.SetSpeedRatio(newSpeed);
}
}
public delegate void SpeedChangedEventHandler(object sender, int newSpeed);
public class BackgroundObject
{
public BackgroundObject()
{
_speed = 10;
}
public event SpeedChangedEventHandler SpeedChanged;
private int _speed;
public int Speed
{
get { return _speed; }
set { _speed = value; SpeedChanged(this,value); }
}
}
난 당신이 사용에 적응할 수 확신합니다.
대단히 감사하겠습니다. – Bill
고마워, 나는 그것을 사용할 수있을 것이다. 우리가 메서드 호출 (SetSpeedRatio)을 만들어야한다는 것은 재미 있습니다. 즉, Xaml과 모두에서 다른 애니메이션으로 속도 비율 변경을 애니메이션으로 만들 수 없습니다. 그러나 이것은 항상 새로운 애니메이션을 적용하는 것보다 훨씬 효과적입니다. 감사합니다. – Bill
이 답변은 우리의 경우에 가장 유용했지만 한 가지 중요한 차이점이 있습니다. 적어도 WinRT의 WPF를 사용하십시오. SetSpeedRatio() 메서드는 아무것도하지 않았으므로 SpeedRatio 속성으로 변경하여 트릭을 수행했습니다. –