2013-07-19 15 views
6

Tôi có một lưới có các phần tử trong đó. Tôi muốn di chuyển tất cả những yếu tố đó, vậy nên không thể di chuyển lưới điện tất cả cùng nhau? Điều này không có tác dụng gì từ những gì tôi nhìn thấy và tôi đã thử ngay cả ScaleX và như vậy.Tạo hiệu ứng lưới để di chuyển hoặc trượt sang phải WPF

<Grid x:Name="HancockDetails" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100" Grid.Column="1" RenderTransformOrigin="0.5,0.5">      
    <Rectangle HorizontalAlignment="Left" Height="100" Stroke="Black" VerticalAlignment="Top" Width="100"/> 
    <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Foreground="#FFF30000"/>    
      </Grid> 
      </Grid> 
     </s:ScatterViewItem> 

chức năng của tôi:

Storyboard sb = new Storyboard(); 

DoubleAnimation slide = new DoubleAnimation(); 
slide.To = 3000.0; 
slide.From = 0; 
slide.Duration = new Duration(TimeSpan.FromMilliseconds(40.0)); 

// Set the target of the animation 
Storyboard.SetTarget(slide,HancockDetails); 
Storyboard.SetTargetProperty(slide, new PropertyPath("RenderTransform.(ScaleTransform.ScaleY)")); 

// Kick the animation off 
sb.Children.Add(slide); 
sb.Begin(); 

Trả lời

6

Bạn cần phải thêm các RenderTransform trong đánh dấu, nếu không thì thời gian chạy không thể tìm thấy nó:

<Grid x:Name="HancockDetails" ...> 
    <Grid.RenderTransform> 
     <TranslateTransform /> 
    </Grid.RenderTransform> 
</Grid> 

Tôi giả sử bạn muốn sử dụng TranslateTransform, và không ScaleTransform, vì mục tiêu là để trượt lưới trên, không phải để thay đổi kích cỡ nó?

Storyboard.SetTargetProperty(slide, 
    new PropertyPath("RenderTransform.(TranslateTransform.X)")); 
+0

Không thể giải quyết tất cả các tham chiếu thuộc tính trong đường dẫn thuộc tính 'RenderTransform. (TranslateTransform.XProperty)'. Xác minh rằng các đối tượng áp dụng hỗ trợ các thuộc tính. – user99999991

+0

Cũng đã thử với "" – user99999991

+0

@ user2229804 bạn có thể tham chiếu trực tiếp với TranslateTransform như tôi đã làm ở trên không? Tôi nghĩ điều đó ít gây nhầm lẫn hơn. Nếu bạn không thể, thì tôi nghĩ cú pháp chính xác sẽ là '" (FrameworkElement). (TranslateTransform.X) "'. – McGarnagle

5

Thay vì cố gắng để tạo ra một kịch bản bằng tay nó là muuuuuuch dễ dàng hơn để sử dụng Expression Blend. Một công cụ thiết kế miễn phí của nó khen Visual Studio. Bảng phân cảnh bạn đang giải thích sẽ mất tất cả 30 giây để thực hiện ở đó và sẽ không có mã. Sau đó, khi bạn muốn nó chạy nó sẽ chỉ là StoryBoardName.Begin()

Để dễ dàng? Heres một nguồn tài nguyên. http://msdn.microsoft.com/en-us/expression/cc197141.aspx

+0

Tôi đồng ý dễ dàng trong Blend, nhưng về cơ bản tôi phải tạo nó cho mọi đối tượng cụ thể. Và tôi có rất nhiều đồ vật tôi muốn di chuyển theo cùng một cách. Tôi chắc chắn có một cách xung quanh nó, nhưng nó có vẻ phức tạp hơn sau đó chỉ cần thực hiện một chức năng duy nhất không? – user99999991

+0

-1, Blend không bao giờ có thể khen ngợi VS. – Nitesh

+2

@Nitesh bạn đang nói về cái gì? Blend là một công cụ tuyệt vời để phát triển. Như nhiều chuyên gia đã biết, các kỹ sư không phải là chuyên gia UI. Vì vậy, khi bạn phải viết mã và thiết kế đồng thời thường thiết kế rơi WAY ngắn. Nếu bạn có thể lấy một nửa vấn đề đó ra (mã) thì bạn có thể tập trung vào những gì có vẻ chính xác. Expression Blend là một công cụ tuyệt vời. –