2012-05-03 143 views
2

我想製作一個TranslateTransform動畫。在動畫中,我需要我的對象留在窗口的中心。我知道WPF動畫是Freezable。我正在使用轉換器,但它在啓動時初始化值。有什麼辦法可以在運行時設置EasingDoubleKeyFrame的值嗎?如何在運行時更改EasingDoubleKeyFrame值?

這裏是我的XAML代碼:

<Storyboard x:Key="Storyboard1"> 
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="grid"> 
     <EasingDoubleKeyFrame KeyTime="0" Value="{Binding Width, Converter={StaticResource Minus}, ElementName=grid}"/> 
     <EasingDoubleKeyFrame KeyTime="0:0:1" Value="{Binding Width, Converter={StaticResource EnteringValueConverter}, ElementName=grid}"/> 
    </DoubleAnimationUsingKeyFrames> 
</Storyboard> 

回答

0

添加X:名稱屬性的EasingDoubleKeyFrame元素。 之後,你應該能夠通過代碼來訪問它:

X:NAME = 「關鍵幀」

然後:

keyframe.SetValue(EasingDoubleKeyFrame.ValueProperty,yourValue);

+0

我將x:Name屬性添加到EasingDoubleKeyFrame元素,但我無法從後面的代碼中訪問它。 在後面的代碼中沒有任何名稱爲myEasingKey。 –

0

「這是因爲動畫凍結的對象。有一個在MSDN Documentation的更多信息,但基本上這意味着你不能用綁定,因爲在凍結對象的屬性(即動畫)不能改變。

要避開這個限制,你需要在代碼隱藏方面做一些或所有的工作。「從Stackoverflow

0

EasingDoubleKeyFrame

報價不能通過x:Name屬性進行訪問。相反,你應該使用不同的方法來定義EasingDoubleKeyFrameStaticResource並通過ResourceKey這樣的鏈接是:通過後面的代碼

<UserControl.Resources> 
    <EasingDoubleKeyFrame x:Key="myEasingKey" KeyTime="0:0:2" Value="136" /> 
    <Storyboard x:Key="Storyboard1"> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" 
             Storyboard.TargetName="rectangle"> 
      <StaticResource ResourceKey="myEasingKey" /> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</UserControl.Resources> 

訪問它象下面這樣:

(EasingDoubleKeyFrame)Resources["myEasingKey"].Value = X; 

希望這有助於...