2010-06-02 20 views
6

Tại sao Storyboard.SetTargetName hoạt động nhưng Storyboard.SetTarget không? đây XAML -Storyboard.SetTarget vs Storyboard.SetTargetName

<Grid Grid.Row="0" ClipToBounds="True"> 
     <X:SmartContentControl x:Name="smartContent" Content="{Binding Path=MainContent}" ContentChanging="smartContent_ContentChanging"> 
      <X:SmartContentControl.RenderTransform> 
       <TranslateTransform x:Name="translateTransformNew" X="0" Y="0"/> 
      </X:SmartContentControl.RenderTransform> 
     </X:SmartContentControl> 
     <ContentControl Content="{Binding ElementName=smartContent, Path=LastImage}"> 
      <ContentControl.RenderTransform> 
       <TranslateTransform x:Name="translateTransformLast" X="0" Y="0"/> 
      </ContentControl.RenderTransform> 
     </ContentControl> 
    </Grid> 

Đây C#

private void smartContent_ContentChanging(object sender, RoutedEventArgs e) 
{ 
    Storyboard storyBoard = new Storyboard(); 
    DoubleAnimation doubleAnimation1 = new DoubleAnimation(0.0, -smartContent.RenderSize.Width, new Duration(new TimeSpan(0, 0, 0, 0, 500))); 
    DoubleAnimation doubleAnimation2 = new DoubleAnimation(smartContent.RenderSize.Width, 0.0, new Duration(new TimeSpan(0, 0, 0, 0, 500))); 

    doubleAnimation1.AccelerationRatio = 0.5; 
    doubleAnimation2.DecelerationRatio = 0.5; 
    storyBoard.Children.Add(doubleAnimation1); 
    storyBoard.Children.Add(doubleAnimation2); 
    Storyboard.SetTarget(doubleAnimation1, this.translateTransformLast); //--- this does not work 
    //Storyboard.SetTargetName(doubleAnimation1, "translateTransformLast"); -- this works 
    Storyboard.SetTargetProperty(doubleAnimation1, new PropertyPath(TranslateTransform.XProperty)); 
    Storyboard.SetTarget(doubleAnimation2, this.translateTransformNew);//--- this does not work 
    //Storyboard.SetTargetName(doubleAnimation2, "translateTransformNew"); -- this works 
    Storyboard.SetTargetProperty(doubleAnimation2, new PropertyPath(TranslateTransform.XProperty)); 
    if (smartContent.LastImage != null) 
     storyBoard.Begin(); 
} 

Trả lời

5

Tôi tìm thấy câu trả lời ở đây! Why don't these animations work when I'm using a storyboard?

Bảng phân cảnh không thể tạo hiệu ứng TranslateTransform, vì nó không phải là UIElement. Đây là cách tôi làm ngay bây giờ! :)

Storyboard.SetTarget(doubleAnimation1, this.lastImage); 
    Storyboard.SetTargetProperty(doubleAnimation1, new PropertyPath("RenderTransform.(TranslateTransform.X)")); 

    Storyboard.SetTarget(doubleAnimation2, this.smartContent); 
    Storyboard.SetTargetProperty(doubleAnimation2, new PropertyPath("RenderTransform.(TranslateTransform.X)")); 
+2

Không quá dễ dàng nếu biến đổi của bạn là một phần của nhóm chuyển đổi. Có vẻ như bạn đã tìm thấy một lỗi hợp pháp (tôi vừa mới chạm vào nó). http://connect.microsoft.com/VisualStudio/feedback/details/723701/storyboard-settarget-only-works-on-uielements-but-throws-no-exception –

+3

Nếu bạn là một phần của nhóm, bạn cần phải nhấn con của nhóm và thứ tự quan trọng: Storyboard.SetTargetProperty (translatex, new PropertyPath ("RenderTransform.Children [1] .X")); – reuscam

Các vấn đề liên quan