Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock.

Презентация:



Advertisements
Похожие презентации
Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock.
Advertisements

Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock.
Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock.
Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock.
Классы Windows Presentation Foundation - 1 System.ObjectDispatcherOjectApplicationDependencyObjectVisualUIElementFrameworkElementControlContentControlWindowButtonBaseButtonToggleButtonCheckBoxRadioButtonItemsControlSelectorListBoxListViewComboBoxTabContro
Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock.
Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock.
Dependency Property Расширение разметки (Markup Extensions) Привязки (binding) Лекция 13.
Литература 1.Мэтью Мак-Дональд. Windows Presentation Foundation в.NET 3.5 с примерами на C# 2008 для профессионалов - Изд. Вильямс, Крис Андерсон.
Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock.
Ресурсы WPF Два типа ресурсов WPF: объектные ресурсы (object resource) – определенный.NET-объект, который можно использовать многократно; ресурсы сборки.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Высокоуровневые методы информатики и программирования Лекция 9 Делегаты.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Делегаты Как созданные объекты могут посылать сообщения тем объектам, которые их породили? При программировании под Windows на С и C++ основное средство.
Обобщения ( generics) Обобщения – это классы, структуры, интерфейсы и методы, в которых некоторые типы сами являются параметрами. Эти типы перечисляются.
Классы WindowsForms элементов управления для работы со структурами данных Control ListViewTreeViewListControl ComboBoxListBox CheckedListBox DataGridViewDataGrid.
Транксрипт:

Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock Control ContentControl Frame Window NavigationWindow ButtonBase Button RepeatButton ToggleButton CheckBoxRadioButton RangeBase Slider ProgressBar TextBoxBase TextBox RichTextBox ItemsControl MenuBase MenuContextMenu HeaderedItemsControl MenuItemToolbar TreeViewItem Selector TabControl ListBox ListView ComboBox TreeView ToolBarTray Panel GridCanvas ContentElement FrameworkContentElement FrameworkTemplateStyle NavigationService

Свойства зависимостей (dependency properties) Система свойств WPF (WPF property system ) - набор сервисов, которые расширяют функциональность свойств CLR. Свойства, которые управляются системой свойств WPF, называются свойствами зависимостей (dependency properties). Основной функцией системы свойств WPF является вычисление значений свойств и уведомление об изменении значений. Изменение значения свойства зависимостей может быть связано с различными участниками системы свойств WPF – стилями, триггерами (triggers), наследованием значений свойств, установкой локальных значений. Свойства зависимостей (dependency properties) поддерживают проверку корректности значений (property invalidation) приведение типа (dependent-value coercion) значения по умолчанию (default values) наследование (inheritance) привязку данных (data binding) анимацию (animation) оповещение об изменении значений (property change notification) стили (styling)

Свойства зависимостей и свойства CLR Для свойств зависимостей из библиотек WPF определены методы {get; set}, позволяющие использовать для них обычный синтаксис CLR для свойств. В документации WPF есть информация о том, что свойство реализовано как свойство зависимостей. Например, свойство string Text { get; set; } класса TextBox определено как свойство зависимостей, а свойство string SelectedText { get; set; } класса TextBox не является свойством зависимостей. В WPF определены два класса для поддержки свойств зависимостей: DependencyProperty поддерживает регистрацию свойства зависимостей в системе свойств WPF и информацию о свойствах зависимостей; DependencyObject используется как базовый для всех типов, в которых определяются свойства зависимостей.

Класс DependencyProperty Класс поддерживает регистрацию свойства зависимостей в системе свойств WPF. Чтобы определить пользовательское свойство зависимости, необходимо, зарегистрировать его с помощью статического метода Register класса DependencyProperty в системе свойств WPF; сохранить в открытом статическом поле класса (доступном только для чтения) ссылку на объект DependencyProperty, который возвращает метод Register при успешной регистрации. При регистрации можно определить для свойства обычные CLR методы доступа {get; set} (рекомендуется); с помощью объекта типа PropertyMetadata передать информацию о том, какие службы (привязка данных, ведение журнала, …) будут использоваться с регистрируемым свойством зависимостей. System.Object System.Windows.DependencyProperty

Регистрация свойства зависимости Регистрацию свойства зависимостей выполняет статический метод Register класса DependencyProperty. Метод перегружен (3). Перегруженный вариант с наибольшим числом параметров public static DependencyProperty Register( string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata, ValidateValueCallback validateValueCallback ); При регистрации необходимо указать имя свойства (string name); тип свойства (Type propertyType); тип-владелец, в котором регистрируется свойство зависимости (Type ownerType). Дополнительно можно определить метаданные свойства зависимостей (PropertyMetadata typeMetadata) и метод обратного вызова для пользовательской проверки корректности значений свойства. В метаданных свойства зависимостей можно предусмотреть методы обратного вызова, которые будут вызываться при изменении значения свойства и для анализа допустимости (coerce) значения свойства.

Пример регистрации свойства зависимостей В примере в классе DoubleValueTextBox в статическом конструкторе зарегистрировано свойство зависимостей с именем DoubleValue. Свойство имеет тип double, его владельцем является тип DoubleValueTextBox. Ссылка на объект DependencyProperty находится в поле DoubleValueProperty класса-владельца (как имя статического поля класса принято использовать имя свойства, к которому добавлен корень Property). Для свойства определены методы {get; set}, позволяющие использовать для него обычный синтаксис CLR для свойств (методы GetValue и SetValue определены в классе DependencyObject). При регистрации для свойства задано значение NaN по умолчанию. public class DoubleValueTextBox : StackPanel { public static readonly DependencyProperty DoubleValueProperty; static DoubleValueTextBox() { PropertyMetadata metadata = new PropertyMetadata(OnDoubleValueChanged); metadata.DefaultValue = (double) double.NaN; DoubleValueProperty = DependencyProperty.Register("DoubleValue", typeof(double), typeof(DoubleValueTextBox), metadata); } public double DoubleValue { get { return (double)this.GetValue(DoubleValueProperty); } set { this.SetValue(DoubleValueProperty, value); } }

Класс DependencyObject Класс является базовым для типов, использующих свойства зависимостей WPF. Метод SetValue класса DependencyObject задает локальное значение свойства зависимостей. Метод бросает исключение, если значение value имеет тип, который не может быть приведен к типу, указанному при регистрации свойства. Метод GetValue класса DependencyObject возвращает текущее действующее значение свойства зависимостей. Действующее значение вычисляется системой свойств WPF с учетом всех данных, которые влияют на значение данного свойства зависимости. System.Object System.Windows.Threading.DispatcherObject System.Windows.DependencyObject public Object GetValue ( DependencyProperty dp ); public void SetValue ( DependencyProperty dp, Object value );

Проверка корректности значения свойства Для проверки корректности значения свойства зависимости следует определить отдельный метод с сигнатурой, отвечающей делегату ValidateValueCallback, который указывается при регистрации свойства зависимости и работает как метод обратного вызова. public delegate bool ValidateValueCallback( Object value ); Метод выполняет пользовательскую проверку значения свойства зависимостей после обычной проверки типа, и должен возвращать значение true, если значение свойства принимается, и false в противном случае. Метод не предполагает корректировку значения свойства – новое значение принимается или нет. Проверку корректности значения следует выполнять в отдельном методе, а не в упаковщиках свойства { get; set}, так как код WPF может вызвать методы SetValue или GetValue напрямую без вызова { get; set} ; значение может зависеть от других объектов, например, свойство может унаследовать свое значение через дерево элементов или получить его в результате привязки данных.

Присоединенные (attached) свойства зависимостей Присоединенные (вложенные) свойства зависимостей - это механизм, который дает возможность присваивать значения свойствам других классов. Например, присоединенными свойствами зависимости являются свойства Row и Column в классе Grid. Эти свойства зарегистрированы в класе Grid как присоединенные (вложенные), вызовы методов GetValue и SetValue класса DependencyObject находятся в статических методах класса Grid: public static void SetRow( UIElement element, int value ); public static int GetRow( UIElement element ); <Button Grid.Row="1" Margin="5,29,5,50" Name="button1 Click="button1_Click"> Add Пример:

Регистрация присоединенного свойства зависимостей Для регистрации присоединенного свойства зависимостей используется одна из перегрузок метода RegisterAttached класса DependencyProperty. Перегруженный вариант с наибольшим числом параметров public static DependencyProperty RegisterAttached( string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, ValidateValueCallback validateValueCallback ); Параметры метода имеют такой же смысл как в методе Register(). Регистрация присоединенного свойства отличается от регистрации свойства зависимости тем, что вызовы методов GetValue и SetValue упаковываются не в методы {get; set }, а в статические методы с именами Set ИмяСвойства() и Get ИмяСвойства().