2013-04-09 2 views
17

Следующий код работает нормально.Создание раскадровки в коде в 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> 

Но в этом From и To значений являются статическими. Мне нужно передать значения динамического разрешения системы. Поэтому мне нужно, чтобы он был создан в коде. Можно ли это сделать?

Как его преобразовать в код?

+1

Да, вы можете создать объект Storyboard в коде и применить те же свойства, что и в XAML. Все может быть заполнено динамически на основе ввода, который вы получаете. – Terry

+0

Вы пробовали поиск, в Интернете много примеров (например: http://www.codeproject.com/Articles/23257/Beginner-s-WPF-Animation-Tutorial) – Terry

+0

Да, тот же пример, который я прошел. trie this Storyboard sb = new Storyboard(); DoubleAnimation da_AngleAnimation = новый DoubleAnimation(); Продолжительность продолжительности = новая Продолжительность (TimeSpan.FromSeconds (1)); da_AngleAnimation.Duration = duration; da_AngleAnimation.From = 1920; da_AngleAnimation.To = 100; sb.Duration = duration; sb.BeginAnimation (Window.LeftProperty, da_AngleAnimation); Не работает. Я где-то не прав? – Raj

ответ

34

При работе в коде вам не нужна раскадровка, просто анимация для основных вещей, как вы показываете в своем вопросе. Я сделал небольшой образец, чтобы показать, как легко это работает.

Это полный код позади от 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); 
     } 
    } 
} 

Это как XAML выглядит следующим образом:

<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> 

Поместите это в приложении WPF и посмотреть, как это работает, эксперимент с это и попробовать другие анимации/свойства.

+1

Я попробовал это вместо прямоугольника DoubleAnimation animation = new DoubleAnimation (1920, 100, duration); page.BeginAnimation (Window.LeftProperty, анимация); Он отлично работает по моему требованию – Raj

+0

Я просто думаю, что анимация, которую вы подключили к вашей раскадровке, не была вызвана должным образом, но, поместив ее в окно, она работает. – Terry

+0

Я хочу остановить анимацию вручную, поэтому требуется раскадровка :( –

3

Добавление комментария пример кода djerry был бы выглядеть следующим образом:

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

wnd.BeginAnimation(Window.LeftProperty, anim); 

и вы должны иметь этот код в окно загружается обработчик событий. Надеюсь это поможет.

Смежные вопросы