2011-10-18 68 views
3

我想要做的是使用資源定義我的動畫的所有BeginTimes。在WPF動畫設置屬性BeginTime到一個靜態資源

例如,我想:

<sys:TimeSpan x:key="SomeResource">... </sys:TimeSpan> 

... 

<DoubleAnimation BeginTime={StaticResource SomeResource}/> 

顯然SYS:時間跨度是不正確的類型使用。如何定義我的資源,以便在定義動畫時可以將其引用爲資源?

我也想這樣做純粹是XAML。

謝謝。

回答

3

System.TimeSpan類型是否正確使用,因爲是這是BeginTime類型。您也可以對Duration執行相同的操作(但使用System.Windows.Duration類型代替)。

這裏是在動畫中使用StaticResource一個例子(2秒後,淡入爲1秒):

<Button Content="Placeholder" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      Opacity="0.5"> 
     <Button.Resources> 
      <sys:TimeSpan x:Key="FadeInBeginTime">0:0:2</sys:TimeSpan> 
      <Duration x:Key="FadeInDuration">0:0:1</Duration> 
     </Button.Resources> 
     <Button.Style> 
      <Style> 
       <Style.Triggers> 
        <EventTrigger RoutedEvent="UIElement.MouseEnter"> 
         <BeginStoryboard x:Name="FadeInBeginStoryBoard"> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetProperty="Opacity" 
               To="1" 
               BeginTime="{StaticResource FadeInBeginTime}" 
               Duration="{StaticResource FadeInDuration}" /> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger> 
        <EventTrigger RoutedEvent="UIElement.MouseLeave"> 
         <StopStoryboard BeginStoryboardName="FadeInBeginStoryBoard" /> 
        </EventTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 

假設你已經聲明的sys命名空間:

xmlns:sys="clr-namespace:System;assembly=mscorlib" 

希望這有助於!

+0

System.TimeSpan確實有效。非常感謝你的答案。我一直在努力尋找使用的正確類型,並且在我早些時候嘗試過TimeSpan的時候肯定做了一些愚蠢的事情。 – George

+2

請注意,這在Silverlight中不起作用,顯然...給出了本機異常。 – McGarnagle