Программирование >>  Программирование с использованием ajax 

1 ... 365 366 367 [ 368 ] 369 370 371 ... 396


Доступны три типа ключевых кадров для каждого типа временной шкалы.

□ Дискретный (discrete). Дискретный ключевой кадр заставляет анимируемое значение перепрыгивать на указанное значение безо всяких переходов.

□ Линейный (linear). Линейный ключевой кадр заставляет анимируемого значение достигать указанного значения с использованием линейного перехода.

□ Сплайновый (spline). Сплайновый ключевой кадр заставляет анимируемое значение достигать указанного значения с использованием нелинейного перехода, задаваемого кубической функцией кривой Безье.

Следовательно, всего существует девять типов объектов ключевого кадра:

DiscreteDoubleKeyFrame LinearDoubleKeyFrame SplineDoubleKeyFrame DiscreteColorKeyFrame LinearColorKeyFrame SplineColorKeyFrame DiscretePointKeyFrame LinearPointKeyFrame SplinePointKeyFrame

Классы ключевых кадров имеют те же три свойства, что и классы временных шкал, рассмотренные в предыдущем разделе, но у классов сплайновых ключевых кадров еще также есть одно дополнительное свойство (табл. 34.3).

Таблица 34.3. Свойства классов ключевых кадров

Свойство Описание

Name Позволяет указывать имя для ключевого кадра, чтобы на него можно было ссы-

латься в других местах

KeyTime Позволяет задавать месторасположение ключевого кадра в виде промежутка вре-

мени, который должен пройти после запуска воспроизведения временной шкалы

Value Позволяет указывать значение, которое должно быть достигнуто или установлено

при достижении данного ключевого кадра

KeySpiine Позволяет задавать два набора из двух чисел в формате cplx, cply ср2х, ср2у для определения кубической функции Безье, которая должна использоваться для анимации свойства. (Только для сплайновых ключевых кадров.)

Например, анимировать позицию элемента управления Ellipse в квадрате путем анимации его свойства Center, которое относится к типу Point, можно было бы следующим образом:

<Storyboard х:Key= EllipseMover >

<PointAnimationUsingKeyFrames Storyboard.TargetName= MyEllipse storyboard.TargetProperty= Center RepeatBehavior= Forever> <LinearPointKeyFrame KeyTime= 00:00:00 Value= 50,50 /> <LinearPointKeyFrame KeyTime= 00:00:01 Value= 100,50 /> <LinearPointKeyFrame KeyTime= 00:00 : 02 Value= 100, 100 /> <LinearPointKeyFrame KeyTime= 00:00:03 Value= 50,100 /> <LinearPointKeyFrame KeyTime= 00:00:04 Value= 50,50 />

</PointAnimationUsingKeyFrames> </Storyboard>

Значения точек указываются в XAML-коде в формате х, у.

Статические и динамические ресурсы

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



Определяются ресурсы как элементы в объекте ResourceDictionary. Уже по самому названию этого объекта понятно, что он представляет собой коллекцию объектов с ключами. Именно поэтому в приведенных до сих пор примерах кода при определении ресурсов использовались атрибуты х:Кеу для указания ассоциируемого с ресурсом ключа. Получать доступ к объектам ResourceDictionary можно в разных местах. Они могут размещаться как в локальном элементе управления, окне или приложении, так и во внешней сборке.

Ссылаться на ресурсы можно двумя способами: статически и динамически. Обратите внимание, что сам ресурс от этого другим не становится, т.е. он не определяется как статический или динамический. Разница заключается лишь в том, как он используется.

Статические ресурсы

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

Для ссылки на статический ресурс применяется следующий синтаксис расширения разметки:

{СтатическийРесурс имяРесурса]

Например, при наличии стиля, определенного для элементов управления Button, со значением MyStyle в атрибуте х:Кеу, сослаться на него в элементе управления можно следующим образом:

<Button Style= {StaticResource MyStyle} ...>...</Button>

Динамические ресурсы

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

Следовательно, получается, что динамические ресурсы обеспечивают большую гибкость, чем статические. Однако у них есть один важный недостаток. Использование динамических ресурсов приводит к получению чуть большего количества накладных расходов, из-за чего их следует применять как можно реже, чтобы производительность приложений была оптимальной

Синтаксис, требуемый для ссылки на ресурс динамически, очень похож на тот, что необходим для ссылки на ресурс статическим образом:

[ДинамическийРесурс имяРесурса]

Например, при наличии стиля, определенного для элементов управления Button, со значением MyDynamicStyle, в атрибуте х:Кеу, сослаться на него в элементе управления можно так:

<Button Style= {DynamicResource MyDynamicStyle} ...>...</Button>



Ссылка на ресурсы типа Style

Ранее уже было показано, каким образом ссылаться на ресурс типа Style в элементе управления Button, как статически, так и динамически. Этот ресурс Style может находиться, например, в свойстве Resources локального элемента управления Windows, как показано ниже:

<Window . . . > <Window.Resources>

<Style x:Key= MyStyle TargetType= Button > </Style>

</Window.Resources> </Window>

Каждый элемент управления Button, для которого должен применяться этот ресурс, тогда должен ссылаться на него в своем свойстве Style (статически или динамически). В качестве альтернативного варианта можно сделать ресурс Style сразу глобальньш для всех элементов управления данного типа, т.е. так, чтобы объект Style применялся к каждому элементу управления в приложении, который относится к указанному типу. Для этого достаточно просто опустить атрибут х: Key:

<Window ...> <Window.Resources> <Style TargetType= Button >

</Style>

</Window.Resources> </Window>

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

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

Практическое занятие Триггеры, анимационные эффекты и ресурсы

1. Создайте новое WPF-приложение по имени СЬ34Ех04и сохраните его в каталоге

С:\BegVCSharp\Chapter34.

2. Скопируйте код из файла Windowl.xaml в Ch34Ex03 в файл Windowl.xaml в Ch34Ex04, но измените ссылку на пространство имен в элементе Window следующим образом:

<Window x:Class= Ch34Ex04.Windowl

3. Скопируйте обработчик событий ButtonClick () из Windowl. xaml. cs в Ch34Ex03 в файл Windowl. xaml. cs в Ch34Ex04.



1 ... 365 366 367 [ 368 ] 369 370 371 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика