2010-03-16 32 views
5

Tôi phát triển một ứng dụng trong WPF bằng cách sử dụng mẫu MVVM. Tôi đang hiển thị biểu đồ được định hướng, với các nút và liên kết (xem hình sau).Hoạt ảnh động sử dụng bảng phân cảnh

http://free0.hiboox.com/images/1110/diapo1c36a4b95802846b8553d2fe9b9e6639.png?26

Người dùng có thể kéo và thả các nút từ một "tế bào" khác. Khi người dùng thả một nút, vị trí của nó được thay đổi để căn chỉnh nó trong lưới. Những gì tôi muốn làm, là animate nút khi vị trí của nó được điều chỉnh trong suốt quá trình căn chỉnh.

Các nút, liên kết và dấu phân cách là tất cả các mục được hiển thị trong một ItemsControl. Biểu diễn của chúng được kiểm soát với một số DataTemplates, và vị trí của chúng với Styles.

Những gì tôi đang làm là như sau:

private void Align() { 
    // Computations... 
    TX = ... //Target X is set 
    TY = ... //target Y is set 
    X = TX; 
    Y = TY; // X and Y setters fire PropertyChanged 
} 

<Style x:Key="NodeViewStyle"> 
    <Setter Property="Canvas.Left" Value="{Binding X, Mode=TwoWay}"/> 
    <Setter Property="Canvas.Top" Value="{Binding Y, Mode=TwoWay}"/> 

Những gì tôi muốn làm là như sau:

private void Align() { 
    // Computations... 
    TX = ... 
    TY = ... //TX and TY setters fire PropertyChanged 
} 

<Style x:Key="NodeViewStyle"> 
    <Setter Property="Canvas.Left" Value="{Binding X, Mode=TwoWay}"/> 
    <Setter Property="Canvas.Top" Value="{Binding Y, Mode=TwoWay}"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding State}" Value="UPDATEPOS"> 
      <DataTrigger.EnterActions> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation To="{Binding TX}" Duration="0:0:1" 
             Storyboard.TargetProperty="(Canvas.Left)"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </DataTrigger.EnterActions> 
     </DataTrigger> 
    </Style.Triggers> 

Nhưng điều này không làm việc trong thời gian chạy, vì tôi không thể liên kết với "Để "tài sản của DoubleAnimation của tôi (đó là một Freezable).

Cách đơn giản nhất để thực hiện hoạt ảnh động như vậy là gì? Hoạt hình thuộc tính "X" thông qua bộ hẹn giờ trực tiếp trong chế độ xem?

+2

bạn có tìm thấy giải pháp tương tự MVVM cho điều này không? Nó sẽ là tuyệt vời nếu bạn có thể đăng một đoạn mã xaml của bạn (cụ thể hơn là vấn đề ràng buộc 'Tới') của giải pháp của bạn. Cảm ơn – Peanut

Trả lời

1

Tôi giải quyết một vấn đề tương tự làm động một thuộc tính phụ thuộc (được đính kèm) từ 0 đến 1 và sau đó gắn kết thuộc tính đích mong muốn với thuộc tính phụ trợ với bộ chuyển đổi giá trị. Điều đó có hợp lý không?

+1

Nó làm cho một số ý nghĩa thực sự. Đó là giải pháp phổ biến cho một số vấn đề khá không giống nhau, vì loại sự cố này không thường xuyên xảy ra trên google hoặc stackoverflow :) Nhưng với tư cách là người hâm mộ MVVM lớn, tôi không hài lòng khi thấy rằng tôi đã giải quyết được vấn đề dễ dàng hơn nhiều không có hoa văn. Quá nhiều chi phí quá nhiều. Tôi hy vọng hành vi này sẽ dễ dàng hơn với các bản sửa đổi khuôn khổ trong tương lai, như họ đã làm với InputGesture beeing một Freezable và không chấp nhận lệnh ràng buộc. Freezables là mát mẻ, nhưng không phải lúc nào. –

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