2017-06-05 52 views
-1

我在WPF故事情節是針對兩個對象有許多動畫故事板有許多目標

<Storyboard x:Key="LoadingStoryboard"> 
    <DoubleAnimation To="1" Duration="{StaticResource TransactionTime}" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="Elem1" /> 
    <DoubleAnimation To="1" Duration="{StaticResource TransactionTime}" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="Elem1" /> 
    <DoubleAnimation To="0.4" Duration="{StaticResource TransactionTime}" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="Elem2" /> 
    <DoubleAnimation To="0.4" Duration="{StaticResource TransactionTime}" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="Elem2" /> 
    <DoubleAnimation To="0" Duration="{StaticResource TransactionTime}" Storyboard.TargetProperty="(local:Ring.InnerDiameter)" Storyboard.TargetName="Elem1" /> 
    <DoubleAnimation To="0" Duration="{StaticResource TransactionTime}" Storyboard.TargetProperty="(local:Ring.InnerDiameter)" Storyboard.TargetName="Elem2" /> 

    <DoubleAnimation To="0.85" BeginTime="{StaticResource TransactionTimeSpan}" Duration="0:0:0.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="Elem1" RepeatBehavior="Forever" AutoReverse="True" /> 
    <DoubleAnimation To="0.85" BeginTime="{StaticResource TransactionTimeSpan}" Duration="0:0:0.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="Elem1" RepeatBehavior="Forever" AutoReverse="True" /> 
    <DoubleAnimation To="0.45" BeginTime="{StaticResource TransactionTimeSpan}" Duration="0:0:0.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="Elem2" RepeatBehavior="Forever" AutoReverse="True" /> 
    <DoubleAnimation To="0.45" BeginTime="{StaticResource TransactionTimeSpan}" Duration="0:0:0.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="Elem2" RepeatBehavior="Forever" AutoReverse="True" /> 
</Storyboard> 

一切都很好,直到我試圖開始datatrigger那個故事板。 當我試圖做的事:

<Window.Style> 
    <Style> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsLoading}" Value="True"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard Storyboard="{StaticResource LoadingStoryboard}" /> 
       </DataTrigger.EnterActions> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Style> 

我得到一個異常A Storyboard tree in a Style cannot specify a TargetName. Remove TargetName 'Elem1'.

什麼是創建目標應與datatrigger許多元素的動畫,最佳做法?

回答

0

不要指定資源中的Storyboard.TargetName屬性:

<Storyboard x:Key="LoadingStoryboard"> 
    <DoubleAnimation To="1" Duration="{StaticResource TransactionTime}" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" /> 
    <DoubleAnimation To="0.4" Duration="{StaticResource TransactionTime}" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" /> 
    <DoubleAnimation To="0" Duration="{StaticResource TransactionTime}" Storyboard.TargetProperty="(local:Ring.InnerDiameter)" /> 

    <DoubleAnimation To="0.85" BeginTime="{StaticResource TransactionTimeSpan}" Duration="0:0:0.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" RepeatBehavior="Forever" AutoReverse="True" /> 
    <DoubleAnimation To="0.45" BeginTime="{StaticResource TransactionTimeSpan}" Duration="0:0:0.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" RepeatBehavior="Forever" AutoReverse="True" /> 
</Storyboard> 

...並定義爲每個單獨的元素觸發到要應用動畫:

<Button x:Name="Elem1"> 
    ... 
    <Button.Triggers> 
     <EventTrigger RoutedEvent="Loading"> 
      <BeginStoryboard Storyboard="{StaticResource LoadingStoryboard}" /> 
     </EventTrigger> 
    </Button.Triggers> 
</Button> 

<Button x:Name="Elem2"> 
    ... 
    <Button.Triggers> 
     <EventTrigger RoutedEvent="Loading"> 
      <BeginStoryboard Storyboard="{StaticResource LoadingStoryboard}" /> 
     </EventTrigger> 
    </Button.Triggers> 
</Button> 

的其他選項是以編程方式應用Storyboard

Programmatically creating a Storyboard in a WPF ControlTemplate

+0

它不起作用,因爲我想要。 Elem1和Elem2之間的「To」屬性中的數字不同。你的代碼爲兩者提供相同的動畫。 – nrofis

+0

如果動畫不同,則應定義兩個不同的故事板而不是一個。其餘與我的答案相同。 – mm8

+0

你得到的錯誤信息應該是不言自明的。你做錯了。 – mm8