|
Программирование >> Программирование с использованием ajax
<EventTrigger RoutedEvent= UIElement.MouseLeave > <StopStoryboard BeginstoryboardName= PulseButton BeginStoryboard /> </EventTrigger> В этом коде для управления выполнением анимационного эффекта используются события MouseEnter и MouseLeave, унаследованные от базового класса UIElement элемента управления Button. Событие MouseEnter заставляет анимационный эффект запускаться через элемент BeginStoryboard, а событие MouseLeave - останавливаться через элемент StopStoryboard. Важно обратить внимание на то, что местонахождение ресурса раскадровки устанавливается с помощью ссылки на статический ресурс. Здесь в этом есть смысл, потому что объект Storyboard определен локально в элементе управления и намерений изменять его во время выполнения нет. Еще мы определили два других триггера для обеспечения подсвечивания кнопки при наведении на нее курсора и выполнении на ней щелчка за счет использования растрового эффекта OuterGlowBitmapEf f ect. Чтобы достичь этого, мы воспользовались такими уже описанными ранее в главе свойствами, как IsMouseOver и IsPressed: <Trigger Property= IsMouseOver Value= True > <Setter TargetName= LayoutGrid Property= BitmapEffect > <Setter.Value> <OuterGlowBitmapEffect GlowColor= Red GlowSize= 20 /> </Setter.Value> </Setter> </Trigger> <Trigger Property= IsPressed Value= True > <Setter TargetName= LayoutGrid Property= BitmapEffect > <Setter.Value> <OuterGlowBitmapEffeet GlowColor= Yellow GlowSize= 40 /> </Setter.Value> </Setter> </Trigger> Этот код указывает, что при наведении курсора мыши кнопка должна подсвечиваться красным цветом с небольшой областью свечения, а при выполнении на ней щелчка - желтым цветом с чуть большей областью свечения. Программирование с использованием WPF Теперь, когда были рассмотрены все основные приемы программирования WPF, можно переходить к созданию собственных приложений. К сожалению, здесь не хватит места, чтобы описать другие замечательные функциональные возможности WPF, вроде способов привязки данных и форматирования изображения списков. Однако останавливаться сейчас было бы неправильно. Потому прежде чем завершить эту главу, мы предлагаем рассмотреть еще два вопроса, которые выбраны не из-за их сложности, а из-за того, что они охватывают задачи, которые вам наверняка придется наиболее часто решать в своих WPF-приложениях. □ Создание и использование собственных элементов управления. □ Реализация в элементах управления свойств зависимостей. В самом конце мы еще рассмотрим последний пример, иллюстрирующий больше приемов, чем было описано в этой главе, и даже немного деталей, касающихся выполнения привязки данных в WPF. Пользовательские элементы управления в WPF в WPF предлагается ряд элементов управления, которые являются полезными во многих ситуациях. Однако, как и во всех .NET-каркасах разработки, в WPF разрешено и расширять эти элементы управления, а точнее - создавать собственные элементы управления за счет наследования своих классов от тех, что входят в состав иерархии стандартных классов WPE Одним из наиболее полезных классов, от которого можно наследовать свои классы, является UserControl. Этот класс обладает всей базовой функциональностью, которая, скорее всего, понадобится элементу управления WPF, и позволяет создаваемому элементу управления практически незаметно вливаться в существующий набор элементов WPF. Все, что можно делать со стандартными элементами управления WPF, например, создавать анимационные эффекты, задавать стили, определять шаблоны и т.д., можно также делать и с пользовательскими элементами управления. Добавлять пользовательские элементы в проект можно, выбирая в меню Project (Проект) пункт Add User Control (Добавить пользовательский элемент управления). Это приводит к отображению на экране в качестве отправной точки пустого элемента управления Canvas. Определяются пользовательские элементы с помощью высокоуровневого элемента UserControl в XAML, унаследованного от System.Windows. Controls.UserControl класса в файле отделенного кода. После добавления пользовательского элемента в проект можно приступать к добавлению элементов управления для его компоновки и отделенного кода для его настройки. Сделав это, можно начинать использовать этот элемент в различных частях приложения и даже в других приложениях. При создании пользовательских элементов управления обязательно необходимо знать о том, как реализуются свойства зависимостей. Ранее в этой главе уже говорилось о том, что свойства зависимостей являются важным средством программирования в WPF. При создании своих собственных элементов управления не использовать предоставляемые этими свойствами функциональные возможности будет просто неразумно. Реализация свойств зависимостей Свойства зависимостей можно добавлять в любой класс, который наследуется от System. Windows . DependencyObject. Этот класс присутствует в иерархии наследования многих классов WPF, в том числе и классов всех стандартных элементов управления, а также класса UserControl. Для внедрения свойства зависимости в класс в его определение добавляется общедоступный статический член типа System. Windows . DependencyProperty. Имя для этого члена можно выбирать любое, но лучше всего пользоваться принятым форматом <ИмяСвойства>Свойство: public static DependencyProperty MyStringProperty; Может показаться странным, что данное свойство определяется как статическое, ведь в конечном итоге получается свойство, которое может уникальным образом определяться для каждого экземпляра класса. Каркас свойств WPF сам следит за этими вещами, поэтому пока об этом беспокоиться не стоит. Далее добавленный член должен конфигурироваться путем применения статического метода DependencyProperty. Register (): public static DependencyProperty MyStringProperty = DependencyProperty.Register(...); Этот метод принимает от трех до пяти параметров, которые перечислены в табл. 34.4 (причем первые три из них являются обязательными). Таблица 34.4. Параметры, которые принимает метод DependencyProperty. Register () Параметр Описание string name Имя свойства Туре propertyType Тип свойства Туре ownerType Тип класса, содержащего данное свойство PropertyMetadata typeMetadata Дополнительные параметры для свойства, а именно: значение, которое должно использоваться для свойства по умолчанию, и методы обратного вызова, которые должны применяться для уведомления об изменении свойства и приведения его значения ValidateValueCallback Методы обратного вызова, которые должны использо- validateValueCallback ваться для верификации значений свойства Существуют и другие методы, которые можно использовать для регистрации свойств зависимостей, например, RegisterAttached (), который можно применять для реализации подключаемого свойства. В настоящей главе эти методы рассматриваться не будут, но изучить их самостоятельно совершенно не помешает. Например, свойство зависимости MyStringProperty можно было бы зарегистрировать с помощью этого метода и трех параметров следующим образом: public class MyClass : DependencyObject { public static DependencyProperty MyStringProperty = DependencyProperty.Register( MyString , typeof(string), typeof(MyClass) Еще может добавляться свойство .NET для обеспечения возможности получения доступа к свойствам зависимостей напрямую (хотя, как будет показано позже, обязательным это не является). Из-за того, что свойства зависимостей определяются как статические, однако, использовать тот же синтаксис, что и для обычных свойств, нельзя. Для получения доступа к значению свойства зависимости необходимо применять методы, унаследованные от DependencyObject: public class MyClass : DependencyObject { public static DependencyProperty MyStringProperty = DependencyProperty.Register ( MyString , typeof(string), typeof(MyClass) public string MyString { get { return (string)GetValue(MyStringProperty); } set { SetValue(MyStringProperty, value); }
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |