2009-08-22 30 views
7

Tôi muốn có một hình ảnh động khi một mục trong ListView thay đổi vị trí, vì vậy nó sẽ từ từ di chuyển đến vị trí mới. Hoặc trong một mẫu hoặc trong mã. Tôi đã thử giảm dần từ một StackPanel (Ảo hóa) và ghi đè ArrangeOverride để định vị lại và tạo hiệu ứng cho các mục. vấn đề là tôi không biết vị trí của mục là 'trước' bản cập nhật để tôi có thể chuyển sang vị trí mới một cách độc đáo. Tôi đã thử kiểm tra các TranslateTransform của mục, lưu trữ trong một từ điển, ghi đè OnItemChanged và lưu trữ OldPosition/Position .. nhưng không ai trong số đó làm việc vì có vẻ như các mục luôn được tái tạo (từ mẫu).(WPF) Animate ListView mục di chuyển

Bất kỳ đề xuất nào khác?

+0

Có lẽ bài viết này bởi Matthias Shapiro sẽ giúp: [Làm thế nào để Tạo một ScrollView hoạt hình (hoặc ListBox) trong WPF] (http://www.designersilverlight.com/2009/05/06/how-to-create-an-animated-scrollviewer-or-listbox-in-wpf/) – Ray

Trả lời

7

Sử dụng FluidMoveBehavior hành vi, nó sẽ làm cho bạn rất nhiều cuộc sống dễ dàng hơn .

bạn có thể áp dụng điều này cho bất kỳ ItemsControl theo cách thức sau đây

<ItemsPanelTemplate x:Key="ItemsPanelTemplate"> 
      <WrapPanel> 
       <i:Interaction.Behaviors> 
        <il:FluidMoveBehavior AppliesTo="Children" Duration="00:00:00.75"/> 
       </i:Interaction.Behaviors> 
      </WrapPanel> 
</ItemsPanelTemplate> 

bạn có thể thấy hành vi này trong Microsoft.Expression.Interactions.dll được cài đặt cùng với Blend 3

+0

Bạn có liên kết đến tài liệu của FluidMoveBehavior không? Tôi dường như không thể tìm thấy bất cứ điều gì. – Ray

+0

Tài liệu giới hạn lớp học có thể được tìm thấy trong Expression Blend SDK Userguide được cài đặt cùng với Blend 3 – rravuri

+0

cảm ơn tất cả các câu trả lời .. phương pháp này với hành vi có vẻ tốt đẹp, nhưng vấn đề là tất cả các mục được tái tạo và do đó tất cả đều hoạt hình vào vị trí (từ trên cùng). cùng một vấn đề áp dụng cho tất cả các giải pháp khác. Tôi sẽ xem xét sử dụng một DataGrid thay vì nó dường như có một vài thứ khác tôi muốn. –

1

Trong thực tế này vấn đề đã được Dan Crevier giải quyết hoàn hảo vào năm 2006. Kiểm tra lớp học PanelLayoutAnimator của anh ấy.

+0

+1. Tôi vừa kiểm tra bài viết này - nó liên quan đến một lớp duy nhất, mẫu mã dễ hiểu, sử dụng nó chỉ liên quan đến việc thêm một thuộc tính duy nhất vào XAML của bạn và kết quả có vẻ tốt. Được đề xuất. –

0

câu trả lời @rravuri làm việc cho tôi, bạn phải xác định như một nguồn lực năng động, bạn có thể áp dụng trực tiếp và sau đó gọi nó likethis ItemsPanel = "{DynamicResource ItemsPanelTemplate}"

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