2012-08-07 42 views
2

我試圖使用數據觸發動畫上邊界的直線刷不過既然來了翻過,我不能使用TargetName使用數據觸發

我的代碼如下問題動畫的線性刷,任何人都可以建議一種方法來解決這個問題?

<Border Grid.Row="2" BorderThickness="10" Height="100" Width="100" > 
    <Border.BorderBrush> 
     <LinearGradientBrush> 
      <GradientStop Color="Yellow" Offset="0.0" /> 
      <GradientStop x:Name="gradient" Color="Orange" Offset="0.5" /> 
      <GradientStop Color="Yellow" Offset="1.0" /> 
     </LinearGradientBrush> 
    </Border.BorderBrush> 
    <Border.Resources> 
     <Style TargetType="Border"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=testBrdrWin, Path=Pulse}" Value="true"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <DoubleAnimation 
            Storyboard.TargetName="gradient" 
            Storyboard.TargetProperty="Offset" 
            From="0" To="1" Duration="0:0:1" 
            AutoReverse="True" RepeatBehavior="Forever" 
            /> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding ElementName=testBrdrWin, Path=Pulse}" Value="true"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <DoubleAnimation 
            Storyboard.TargetName="gradient" 
            Storyboard.TargetProperty="Offset" 
            To="0.5" Duration="0:0:01" 
            AutoReverse="False" 
            /> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Resources> 
</Border> 

感謝

回答

6
  1. 你不能在這裏使用Storyboard.TargetName。你必須使用完整的PropertyPath Syntax
  2. LinearGradientBrush必須在Style本身。

在這個示例代碼中,我已經刪除了所有特殊的東西,因此它將獨立運行,如果你MouseOverBorder。再次適應您的需求。

<Border BorderThickness="10" Height="100" Width="100" > 
    <Border.Resources> 
     <Style TargetType="Border"> 
      <Setter Property="BorderBrush"> 
       <Setter.Value> 
        <LinearGradientBrush> 
         <GradientStop Color="Yellow" Offset="0.0" /> 
         <GradientStop Color="Red" Offset="0.5" /> 
         <GradientStop Color="Yellow" Offset="1.0" /> 
        </LinearGradientBrush> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard> 
          <Storyboard> 
           <DoubleAnimation 
           Storyboard.TargetProperty="BorderBrush.(GradientBrush.GradientStops)[1].(GradientStop.Offset)" 
           From="0" To="1" Duration="0:0:1" 
           AutoReverse="True" RepeatBehavior="Forever" 
           /> 
          </Storyboard> 
         </BeginStoryboard> 
        </DataTrigger.EnterActions> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Resources> 
</Border> 
+0

謝謝,這似乎工作,我沒有意識到你可以參考漸變停止。謝謝,雖然現在我有一個難題,我將提出另一個問題。 – Kezza 2012-08-07 12:25:03

+0

屬性路徑語法鏈接已損壞。 (現在大多數WPF鏈接 - 感謝MS) – user3690202 2015-12-23 01:13:12