2012-08-07 16 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