Ресурсы. Стили. Анимация. Лекция 15
Ресурсы Стили Анимация
Позволяют определять объекты, доступные другим элементам WPF в пользовательском интерфейсе Ресурсный объект определяется один раз, а может использоваться несколько раз Обычно определяются в XAML, но могут определятся и в коде. Объект любого типа может быть определен как ресурс. Каждый элемент WPF определяет коллекцию Resources. Коллекция Resources доступна самому элементу управления, в котором она определена, и элементам управления в его визуальном дереве. Чаще используют коллекцию Windows.Resources
Resources x:Key Resources x:Key x:Key – Задает имя ресурса, на который должны ссылаться желающие использовать этот ресурс. x:Key – должен быть уникален в той коллекции ресурсов, где определен, а не во всем документе Использование : StaticResource Hello DynamicResource Hello StaticResource StaticResource – ресурс определяется ( ищется ) только один раз DynamicResource DynamicResource – ресурс определяется каждый раз, когда это необходимо ( больше накладных расходов ) Ресурсы ищутся в коллекции ресурсов текущего элемента управления и в коллекциях ресурсов элементов выше в визуальном дереве до первого найденного ресурса с подходящим ключом.
Ресурсы
Resources Коллекция Resources – свойство FrameworkElement, а следовательно имеется и у любого его наследника. Resources – словарь (IDictionary) Добавление в словарь элемента. Метод Add Resources.Add("StartDate", DateTime.Now); myButton.Resources.Add("StartDate", DateTime.Now); Доступ к ресурсу элемента – как к словарю DateTime start = (DateTime)Resources["StartDate"]; DateTime end = (DateTime)grid.Resources[EndDate"]; Поиск ресурса в словарях вверх по визуальному дереву DateTime dt2 = (DateTime)FindResource("StartDate"); Безопасный поиск ресурса в словарях вверх по визуальному дереву Brush brush = (Brush)TryFindResource("MyBrush"); Brush redBrush = myButton.TryFindResource(RedBrush") as Brush; Изменение ресурса grid.Resources["myBrush"] = Brushes.Blue;
На уровне элемента Доступно элементу и всем ниже лежащим элементам в его визуальном дереве На уровне окна Доступно всем элементам в окне На уровне приложения Доступно всем элементам во всех окнах В отдельных словарях ресурсов Доступно в том месте, где подключен словарь Может быть доступно нескольким приложениям
Ресурсы могут хранятся в отдельном файле, словаре. XAML Могут использоваться в любом месте приложения Словарь (XAML файл ): ResourceDictionary xmlns=" xmlns:x=" x:Key x:Key ResourceDictionary
Подключение словарей Resources ResourceDictionary MergedDictionaries ResourceDictionary Source MergedDictionaries ResourceDictionary Resources Использование ресурсов
Словари ресурсов
Ресурсы Стили Анимация
Стиль – это коллекция свойств, которые могут быть применены к объекту. Определяют общий набор характеристик Могут определять характеристики не связанные с форматированием. Любое Dependency Property. Поддерживают триггеры Стили устанавливают первоначальные характеристики, которые могут переопределяться.
Стили
Стили, обычно создаются в ресурсах Stylex:KeyTargetType Setter PropertyValue Style Style Использование : Могут создаваться и напрямую в элементе :
Коллекция Setters Свойства класса Setter: Property – какое свойство устанавливаем Value – значение Если сложное значение, то можно устанавливать и так :
Один стиль может применятся для разных типов элементов ( не рекомендуется ). Необходимо указать для какого типа задается свойство. …. TargetType Если указывается TargetType, то все свойства подразумеваются для этого типа
x:Key Свойство x:Key у стиля должно быть задано всегда, чтобы на него можно было сослаться. x:Key TargetType Но. Если свойство x:Key не задано, то стиль автоматически применяется для всех элементов типа заданного в свойстве TargetType …… Можно отменить автоматическое применение стиля к элементу задав свое свойство Style другим стилем или {x:Null}. Элемент может переопределить свойство, установленное стилем, явно задав его значение ( возможно благодаря возможностям DependencyProperty).
BaseOn Свойство BaseOn – может указывать на стиль от которого наследуется этот стиль. Может дополнять и переопределять свойства заданные в родительском стиле. ………….. Наследник должен быть предназначен для того же типа ( т. е. иметь такое же значение TargetType)
Коллекция Setters Коллекция Resources Свойство BasedOn Свойство TargetType Triggers Коллекция Triggers
Внесение простых изменений в зависимости от различных событий Декларативно Style.Triggers Добавляются в коллекцию Style.Triggers
Триггеры
Trigger Trigger – Триггер свойств. Наблюдает за свойством и активизируется, когда значение свойства будет равно Value MultiTrigger MultiTrigger – Мультитриггер. Наблюдает за множеством свойств и активизируется, когда значение всех свойств будет равно значениям Value DataTrigger DataTrigger – Триггер данных. Наблюдает за связанным свойством (Binding). MultiDataTrigger MultiDataTrigger – отслеживает множество связанных свойств EventTrigger EventTrigger – триггер событий. Инициирует серию объектов Action при порождении указанного события.
Свойство, за которым происходит наблюдение указывается в свойстве Property= свойство Значение свойства, при котором должен активироваться триггер, указывается в свойстве Value. Setters – коллекция установщиков Setter, которые устанавливают свойства элемента в случае активации триггера. Как только триггер становится неактивным, элементу управления возвращается его исходный вид.
Аналогично Trigger, но отслеживается несколько свойств одновременно. Отслеживаемые свойств задаются в коллекции MultiTrigger.Conditions объектами Condition
DataTrigger и MultiDataTrigger Такие же как и Trigger и MultiTrigger, но отслеживают связанные данные. Binding Вместо свойства Property имеется свойство Binding
В отличии от других триггеров, которые отслеживают значение свойства и сопоставляют его с указанным значением, триггеры событий указывают события и активизируются при его порождении. Содержит коллекцию Actions вместо коллекции Setters. Коллекция Actions содержит набор действий, которые должны быть выполнены при активации триггера. Анимация
Ресурсы Стили Анимация
Изменение свойств в течении промежутка времени Анимировать можно практически все свойства элемента управления Для анимации используются классы Animation ( более 40 классов ) Классы Animation: Линейные анимации Анимации по ключевым кадрам Анимация на основе путей
Линейная. Классы имеют формат имени Animation Например : DoubleAnimation, ColorAnimation, Int32Animation Анимация на основе ключевых кадров изменяет свойство, используя несколько точек маршрута – ключевых кадров. Поток анимации запускается и проходит через каждый ключевой кадр. AnimationUsingKeyFrames Например : DoubleAnimationUsingKeyFrames Анимация на основе путей использует объект Path. Используется для анимации свойств, связанных с перемещение объектов. AnimationUsingPath Например : DoubleAnimationUsingPath
Анимация
Организует анимацию в пользовательском интерфейсе и управляет ею. Содержит коллекцию Children, содержащую объекты Animation. Все объекты Animation, создаваемые в XAML, должны содержаться в объекте Storyboard. Если какое - либо свойство в Animation не заполнено, то используется свойство из Storyboard Все дочерние классы Animation запускаются одновременно Storyboard Набор анимаций для одного элемента TargetName = button1 – Конечный элемент для анимации. TargetProperty = Button.Width – Анимируемое свойство Свойства TargetName и TargetProperty являются прикрепленными, поэтому могут быть установлены в классе Animation
Duration Duration – длительность анимации AutoReverse AutoReverse – воспроизведение в обратном порядке после завершения BeginTime BeginTime – время начала запуска относительно времени анимации. 0:0:5 – 5 секунд AccelerationRatio AccelerationRatio – задает ускорение в начале анимации DecelerationRatio DecelerationRatio – задает замедление в конце анимации RepeateBehavior RepeateBehavior – задает повторяемость анимации Свойства линейной анимации : From From - начальное значение свойства для анимации. Если не указано, то используется текущее свойство элемента To To – конечное значение свойства By By – значение приращение. Используется, если To не задано.
Анимация может быть добавлена непосредственно в коллекцию Triggers элемента управления
Анимация элемента
Какую анимацию не стоит делать Лекция Романа Здебского Лучшие практики разработки производительных и интерактивных приложений на WPF