2013-04-09 29 views
17

Mã sau đây hoạt động tốt.Tạo bảng phân cảnh theo mã sau trong WPF

<Window.Triggers> 
    <EventTrigger RoutedEvent="Window.Loaded"> 
     <BeginStoryboard> 
      <Storyboard> 
       <DoubleAnimation Duration="0:0:.8" Storyboard.TargetProperty="Left" From="1920" To="0" AccelerationRatio=".1"/> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
</Window.Triggers> 

Nhưng trong này FromTo giá trị là tĩnh. Tôi cần phải vượt qua các giá trị dựa trên độ phân giải hệ thống động. Vì vậy, tôi cần nó được tạo ra trong mã phía sau. Có thể làm được không?

Làm thế nào để chuyển đổi nó thành codebehind?

+1

Có, bạn có thể tạo đối tượng Storyboard trong mã và áp dụng các thuộc tính giống như bạn thực hiện trong XAML. Tất cả mọi thứ có thể được điền tự động dựa trên đầu vào bạn nhận được. – Terry

+0

Bạn đã thử tìm kiếm, có rất nhiều ví dụ trên internet (ví dụ: http://www.codeproject.com/Articles/23257/Beginner-s-WPF-Animation-Tutorial) – Terry

+0

đúng ví dụ tôi đã trải qua. trie này Bảng phân cảnh sb = new Storyboard(); DoubleAnimation da_AngleAnimation = new DoubleAnimation(); Duration duration = new Duration (TimeSpan.FromSeconds (1)); da_AngleAnimation.Duration = duration; da_AngleAnimation.From = 1920; da_AngleAnimation.To = 100; sb.Duration = duration; sb.BeginAnimation (Window.LeftProperty, da_AngleAnimation); Không hoạt động. Tôi có sai ở đâu không? – Raj

Trả lời

34

Khi làm việc trong mã, bạn không cần Bảng phân cảnh thực sự, chỉ hoạt ảnh cho những thứ cơ bản, như bạn hiển thị trong câu hỏi của mình. Tôi đã làm một mẫu nhỏ để cho thấy nó hoạt động dễ dàng như thế nào.

Đây là mã hoàn chỉnh đằng sau của MainWindow:

namespace WpfCSharpSandbox 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      WidenObject(150, TimeSpan.FromSeconds(1)); 
     } 

     private void WidenObject(int newWidth, TimeSpan duration) 
     { 
      DoubleAnimation animation = new DoubleAnimation(newWidth, duration); 
      rctMovingObject.BeginAnimation(Rectangle.WidthProperty, animation); 
     } 
    } 
} 

Đây là cách XAML trông giống như:

<Window x:Class="WpfCSharpSandbox.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Sandbox" Height="350" Width="525"> 
    <Grid Background="#333333"> 
     <Rectangle x:Name="rctMovingObject" Fill="LimeGreen" Width="50" Height="50"/> 
    </Grid> 
</Window> 

Đặt điều này trong một ứng dụng WPF và xem làm thế nào nó hoạt động, thử nghiệm với và thử các hoạt ảnh/thuộc tính khác.

+1

Tôi đã thử hình này thay vì hình chữ nhật Hoạt ảnh DoubleAnimation = new DoubleAnimation (1920, 100, thời lượng); page.BeginAnimation (Window.LeftProperty, hoạt ảnh); Nó hoạt động tốt theo yêu cầu của tôi – Raj

+0

Tôi chỉ đoán hoạt ảnh mà bạn đã ghép nối với bảng phân cảnh của mình không được gọi đúng cách, nhưng bằng cách đặt nó trên cửa sổ nó hoạt động. – Terry

+0

Tôi muốn ngừng hoạt ảnh thủ công nên sử dụng bảng phân cảnh là bắt buộc :( –

3

Thêm djerry của bình luận mẫu mã sẽ trông như thế này:

var anim = new DoubleAnimation { 
           From = 1920, 
           To = 1, 
           }; 

wnd.BeginAnimation(Window.LeftProperty, anim); 

và bạn sẽ phải có mã này trong cửa sổ nạp xử lý sự kiện. Hi vọng điêu nay co ich.