2013-11-25 56 views
1

我想了解WPF中的故事板和動畫。我有一個非常簡單的問題,我似乎無法回答。WPF動畫相對值

我有一個放置在網格中的矩形。我正在嘗試將矩形從網格的一側移到另一側。我可以讓矩形成功移動。然而,問題是我指定的值來自&。所以在我的代碼中,我已經將(50)&硬編碼爲(300)值。我想要發生的是讓矩形在沒有硬編碼值的情況下到達網格的另一側。因爲如果用戶調整窗口大小,我放入的值將浪費時間。

<Rectangle.Triggers> 
      <EventTrigger RoutedEvent="Rectangle.MouseLeftButtonDown"> 
       <EventTrigger.Actions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="Width" 
              From="50" 
              To="300" 
              Duration="0:0:5"/> 
          <ColorAnimation 
           Storyboard.TargetProperty="Fill.Color" 
           To="Yellow" 
           BeginTime="0:0:5"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger.Actions> 
      </EventTrigger> 
     </Rectangle.Triggers> 

回答

0

當動畫尺寸/位置與Storyboard S,總是使用ActualWidth和/或Actualheight性質,而不是通常WidthHeight性質,因爲WidthHeight屬性可以常常具有NaN(非數字)的值,其將在Storyboard試圖訪問它/它們時爆炸。

對於此動畫,您需要聲明父元素的Name屬性,因爲我們將在Storyboard中引用它。試試這個,讓我知道你上車:

<Rectangle.Triggers> 
    <EventTrigger RoutedEvent="Rectangle.MouseLeftButtonDown"> 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetProperty="Width" From="50" 
To="{Binding ActualWidth, ElementName=ParentContainer}" Duration="0:0:5"/> 
        <ColorAnimation Storyboard.TargetProperty="Fill.Color" To="Yellow" 
BeginTime="0:0:5"/> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
    </EventTrigger> 
</Rectangle.Triggers> 
+0

是的完美! – mHelpMe

1

除了使用Width屬性,你可以使用的RenderTransform的ScaleTransform。這可以讓你根據父元素而不是寬度本身進行縮放。看到下面的例子,看看它是否可行...

<Rectangle Height="70" Fill="Green"> 
    <Rectangle.RenderTransform> 
     <TransformGroup> 
      <ScaleTransform ScaleX="0.2"/> 
     </TransformGroup> 
    </Rectangle.RenderTransform> 
    <Rectangle.Triggers> 
     <EventTrigger RoutedEvent="Rectangle.MouseLeftButtonDown"> 
      <EventTrigger.Actions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" 
             From="0.2" 
             To="1" 
             Duration="0:0:5"/> 
         <ColorAnimation 
         Storyboard.TargetProperty="Fill.Color" 
         To="Yellow" 
         BeginTime="0:0:5"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger.Actions> 
     </EventTrigger> 
    </Rectangle.Triggers> 
</Rectangle>