|
Программирование >> Программирование с использованием ajax
<Style TargetType= Button > <Style.Triggers> <Trigger Property= IsMouseOver Value= true > <Setter Property= Foreground Value= Yellow /> </Trigger> </Style.Triggers> </Style> Этот код в случае установки для свойства Button. IsMouseOver значения true будет приводить к изменению у элемента управления Button значения свойства Foreground на Yellow. Свойство IsMouseOver является одним из нескольких чрезвычайно полезных свойств, которые можно использовать в качестве быстрого способа для получения информации об элементах управления и их состоянии. Уже по названию понятно, что значение true для этого свойства устанавливается только тогда, когда на элемент управления наводится курсор мыши. Это позволяет кодировать передвижения мыши. К числу остальных подобных свойств относятся: свойство IsFocused, позволяющее определять то, находится элемент управления в фокусе или нет; свойство IsHitTestVisible, указывающее на то, возможно ли на элементе управления выполнить щелчок (т.е. не закрывают ли его другие элементы управления с более высокой позицией в стопочном порядке), и свойство Is Pressed, показывающее, нажата кнопка или нет. Последнее из этих свойств подходит только для кнопок, унаследованных от ButtonBase, в то время как остальные доступны для всех элементов управления. Помимо свойства Style. Triggers, многих эффектов еще также можно достигать и с помощью свойства ControlTemplate. Triggers. Оно позволяет создавать для элементов управления шаблоны, содержащие триггеры. Именно с его помощью стандартному элементу Button удается реагировать на передвижения мыши, щелчки и изменения фокуса в своем шаблоне. Именно его нужно изменять при желании реализовать упомянутые функциональные возможности самостоятельно. Анимация Анимационные эффекты создаются за счет использования раскадровки (storyboard). Несомненно, лучше всего определять их с помощью визуального средства вроде Expression Blend. Однако их также можно определять и непосредственным редактированием XAML-кода и привлечением файла отделенного кода (поскольку XAML является лишь способом для построения модели объектов WPF). Раскадровка задается с помощью объекта Storyboard, содержащего одну или более временных шкал. Временные шкалы (timeline) определяются с помощью либо ключевых кадров, либо одного из нескольких более простых объектов, инкапсулирующих целые анимационные эффекты. Сложные раскадровки могут даже содержать вложенные раскадровки. Как уже показывалось ранее в примере, объект Storyboard содержится в словаре ресурсов, поэтому на него нужно ссылаться с помощью свойства х:Кеу. Внутри временной шкалы можно анимировать свойства любого элемента в приложении, который относится к типу double, Point или Color. Эти типы охватывают большинство вещей, которые может потребоваться изменять, и обеспечивают вполне приличную степень гибкости. Есть, конечно, и некоторые вещи, которые нельзя делать, например, полностью заменять одну кисть другой, но всегда доступны другие способы получения почти любого эффекта с помощью этих трех типов. У каждого из трех упомянутых типов имеется по два ассоциируемых с ними элемента управления во временной шкале, которые можно использовать в качестве дочерних элементов Storyboard. Выглядят эти шесть элементов управления так: DoubleAnimation, DoubleAnimation UsingKeyFrames, PointAnimation, PointAnimationUsingKeyFrames, ColorAnimation и ColorAnimationUsingKeyFrames. Каждый из них можно ассоциировать с конкретным свойством конкретного элемента управления путем применения таких подключаемых свойств, как Storyboard.TargetName и Storyboard.TargetProperty. Например, при желании анимировать свойство Width элемента управления Rectangle со значением MyRectangle в свойстве Name, нужно было бы установить для этих свойств значения MyRectangle и Width соответственно, и затем использовать для его анимации либо класс DoubleAnimation, либо класс DoubleAnimationUsingKeyFramesWidth. Свойство Storyboard.TargetProperty способно интерпретировать довольно сложный синтаксис и благодаря этому устанавливать месторасположение любого свойства, которое нужно анимировать. В примере, который приводмся в начале этой главе, для двух упомянутых подключаемых свойств использовались такие значения: Storyboard.TargetName= ellipsel Storyboard.TargetProperty= (UIElement.RenderTransform).(TransformGroup.Children) [0].(RotateTransform.Angle) Элемент управления ellipsel относился к типу Ellipse, a свойство TargetProperty задавало угол, на который этот элемент управления должен был вращаться в ходе трансформации. Местонахождение значения этого угла устанавливалось с помощью свойства RenderTransform, принадлежащего экземпляру Ellipse и унаследованного от UIElement, а также первого дочернего элемента в объекте Trans formGroup, который являлся значением этого свойства. Этим первым дочерним элементом был объект RotateTransform, в свойстве Angle которого и содержалось искомое значение угла. Несмотря на то что такой синтаксис может занимать много строк, он очень прост в применении. Самым сложным является определение базового класса, от которого наследуется заданное свойство, но в этом может помочь окно Object Browser. Далее мы сначала рассмотрим простые временные шкалы анимационных эффектов без ключевых кадров, а затем те, в которых используются ключевые кадры. Временные шкалы без ключевых кадров Временные шкалы без ключевых кадров представлены классами DoubleAnimation, PointAnimation и ColorAnimation. У всех них есть свойства, имена которых выглядят идентично, а вот тип варьируется в соответствии с типом самой временной шкалы (обратите внимание на то, что все свойства длительности задаются в XAML-коде в следующем формате: [дни. ]часы:минуты:секунды). В табл. 34.2 приведено краткое описание доступных свойств. Таблица 34.2. Свойства DoxibleAnimation, PointAnimation, and ColorAnimation Свойство Описание Name Позволяет указывать имя для временной шкалы, чтобы на нее можно было ссылаться в других местах BeginTime Позволяет указывать, сколько времени должно проходить после инициации раскадровки перед запуском временной шкалы Duration Позволяет указывать, сколько времени должна действовать временная шкала AutoReverse Позволяет указывать то, должна временная шкала возвращаться в исходное положение по завершении воспроизведения, и должны ли для ее свойств снова устанавливаться исходные значения. Принимает одно из булевских значений (true или false) Окончание табл. 34.2 Свойство Описание RepeatBehavior FillBehavior SpeedRatio From Позволяет указывать, сколько раз временная шкала должна повторять свои действия. Путем ввода целого числа со следующим за ним символом х (например, 5х) можно делать так, чтобы она повторяла свои действия соответствующее этому числу количество раз, а установкой в Forever - чтобы она повторяла их до тех пор, пока не будет временно или полностью приостановлено воспроизведение всей раскадровки Позволяет указывать, как временная шкала должна вести себя в случае завершения выполнения своих действий до остановки воспроизведения раскадровки. Путем установки этого свойства в Hold можно сделать так, чтобы у свойств временной шкалы оставались значения, которые у них были на момент завершения ею выполнения своих действий (именно это значение и используется по умолчанию), а установкой в stop - чтобы им возвращались их исходные значения Управляет скоростью воспроизведения анимационного эффекта относительно значений, указанных в других свойствах. По умолчанию имеет значение 1, но при желании это значение можно изменять в другом коде и тем самым увеличивать или замедлять скорость воспроизведения анимационных эффектов Позволяет указывать первоначальное значение, которое должно устанавливаться для свойства в начале воспроизведения анимационного эффекта. В случае не указания здесь никакого значения использоваться будет текущее значение свойства Позволяет указывать окончательное значение, которое должно устанавливаться для свойства в конце воспроизведения анимационного эффекта. В случае не указания здесь никакого значения использоваться будет текущее значение свойства Позволяет делать так, чтобы анимационный эффект воспроизводился от текущего значения свойства до значения, равного сумме текущего значения и значения, указанного в этом свойстве. Может использоваться как само по себе, так и в сочетании со свойством From Например, приведенная ниже временная шкала будет анимировать свойство Width элемента управления Rectangle со значением MyRectangle в свойстве Name между значениями 100 и 200 на протяжении 5 секунд: <Storyboard х:Key= RectangleExpander > <DoubleAnimation Storyboard.TargetName= MyRectangle Storyboard.TargetProperty= Width Duration= 00:00:05 From= 100 To= 200 /> </Storyboard> Временные шкалы с ключевыми кадрами Временные шкалы с ключевыми кадрами (key frame) представлены классами DoubleAnimationUsingKeyFrames, PointAnimationUsingKeyFrames и ColorAnimation UsingKeyFrames. Эти классы имеют все те же свойства, что и классы из предыдущего раздела, кроме From, То и By. Вместо них предусмотрено свойство KeyFrames, которое представляет собой коллекцию объектов ключевых кадров. Эти временные шкалы могут содержать любое количество ключевых кадров, каждый из которых может заставлять анимируемое значение вести себя по-другому.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |