Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 541 542 543 544 545 546 547 548 549 ... 642

На заметку! В подкаталоге XamlAnimations внутри Chapter_27 есть несколько файлов XAML. Скопируйте их содержимое в редактор Kaxaml, чтобы просмотреть результаты.

Большей частью создание анимации подобно всему тому, что вы уже видели: по-прежнему производится конфигурирование объекта Animation, который затем ассоциируется со свойством объекта. Тем не менее, крупное отличие связано с тем, что разметка XAML не является дружественной к вызовам методов. В результате вместо вызова BeginAnimation() используется раскадровка как промежуточный уровень.

Давайте рассмотрим полный пример анимации, определенной в терминах XAML, и подробно ее проанализируем. Приведенное далее определение XAML будет отображать окно, содержащее единственную метку. После того как объект Label загрузился в память, он начинает анимационную последовательность, во время которой размер шрифта увеличивается от 12 до 100 точек за период в четыре секунды. Анимация будет повторяться столько времени, сколько объект остается загруженным в память. Разметка находится в файле GrowLabelFont.xaml, так что его содержимое необходимо скопировать в редактор Kaxaml, нажать клавишу <F5> и понаблюдать за поведением.

&lt;Window

  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;

  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;

  Height=&quot;200&quot; Width=&quot;600&quot; WindowStartupLocation=&quot;CenterScreen&quot;

  Title=&quot;Growing Label Font!&quot;&gt;

  &lt;StackPanel&gt;

    &lt;Label Content=&quot;Interesting...&quot;&gt;

      &lt;Label.Triggers&gt;

        &lt;EventTrigger RoutedEvent=&quot;Label.Loaded&quot;&gt;

          &lt;EventTrigger.Actions&gt;

            &lt;BeginStoryboard&gt;

              &lt;Storyboard TargetProperty=&quot;FontSize&quot;&gt;

                &lt;DoubleAnimation From=&quot;12&quot; To=&quot;100&quot; Duration=&quot;0:0:4&quot;

                    RepeatBehavior=&quot;Forever&quot;/&gt;

              &lt;/Storyboard&gt;

            &lt;/BeginStoryboard&gt;

          &lt;/EventTrigger.Actions&gt;

        &lt;/EventTrigger&gt;

      &lt;/Label.Triggers&gt;

    &lt;/Label&gt;

  &lt;/StackPanel&gt;

&lt;/Window&gt;

А теперь подробно разберем пример.

Роль раскадровок

При продвижении от самого глубоко вложенного элемента наружу первым встречается элемент &lt;DoubleAnimation&gt;, обращающийся к тем же самым свойствам, которые устанавливались в процедурном коде(From, То, Duration и RepeatBehavior):

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

&lt;DoubleAnimation From=&quot;12&quot; To=&quot;100&quot; Duration=&quot;0:0:4&quot;

                 RepeatBehavior=&quot;Forever&quot;/&gt;

Как упоминалось ранее, элементы Animation помещаются внутрь элемента Storyboard, применяемого для отображения объекта анимации на заданное свойство родительского типа через свойство TargetProperty, которым в данном случае является FontSize. Элемент Storyboard всегда находится внутри родительского элемента по имени BeginStoryboard:

&lt;BeginStoryboard&gt;

  &lt;Storyboard TargetProperty=&quot;FontSize&quot;&gt;

    &lt;DoubleAnimation From=&quot;12&quot; To=&quot;100&quot; Duration=&quot;0:0:4&quot;

                     RepeatBehavior=&quot;Forever&quot;/&gt;

  &lt;/Storyboard&gt;

&lt;/BeginStoryboard&gt;

Роль триггеров событий

После того как элемент BeginStoryboard определен, должно быть указано действие какого-то вида, которое приведет к запуску анимации. Инфраструктура WPF предлагает несколько разных способов реагирования на условия времени выполнения в разметке, один из которых называется триггером. С высокоуровневой точки зрения триггер можно считать способом реагирования на событие в разметке XAML без необходимости в написании процедурного кода.

Обычно когда ответ на событие реализуется в С#, пишется специальный код, который будет выполнен при поступлении события. Однако триггер — всего лишь способ получить уведомление о том, что некоторое событие произошло (загрузка элемента в память, наведение на него курсора мыши, получение им фокуса и т.д.).

Получив уведомление о появлении события, можно запускать раскадровку. В показанном ниже примере обеспечивается реагирование на факт загрузки элемента Label в память. Поскольку вас интересует событие Loaded элемента Label, элемент EventTrigger помещается в коллекцию триггеров элемента Label:

&lt;Label Content=&quot;Interesting...&quot;&gt;

  &lt;Label.Triggers&gt;

    &lt;EventTrigger RoutedEvent=&quot;Label.Loaded&quot;&gt;

      &lt;EventTrigger.Actions&gt;

        &lt;BeginStoryboard&gt;

          &lt;Storyboard TargetProperty=&quot;FontSize&quot;&gt;

1 ... 541 542 543 544 545 546 547 548 549 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий