Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Определение свойств зависимости

Читайте также:
  1. I. Определение состава общего имущества
  2. I. Прежде всего рассмотрим особенность суждений в зависимости от изменениясубъекта.
  3. I.3.1. Определение номенклатуры и продолжительности выполнения видов (комплексов) работ
  4. II. Определение зависимости периода собственных колебаний пружинного маятника от массы груза
  5. II. Свойства и особенности невидимых тел человека.
  6. III. Определение размера единовременной социальной выплаты
  7. III. Перепишите и переведите предложения, возьмите в скобки распространенное определение, подчеркни те основной член распространенного определения (Partizip I или II).

Нужно создать свойства, методы и события, которые будут поступать в наш CustomControl, и на которые будет опираться приложение, использующее его для обработки адреса. В созданном нами CustomControl будут следующие свойства определяющие адрес: Location, Adress1, Adress2, State.

Первый шаг в создании свойства зависимости — это определение статического поля для него с добавленным словом Property в конце его имени:

public static DependencyProperty LocationProperty;

Определение статических полей для свойств — лишь первый шаг. Также понадобится статический конструктор элемента управления, который зарегистрирует свойства, указывая имя свойства, тип данных и класс элемента управления, владеющий данным свойством. Это позволит воспользоваться некоторыми специфическими средствами свойств (вроде наследования значений) за счет передачи объекта FrameworkPropertyMetadata с правильно установленными флагами. Также в этот момент можно присоединить обратные вызовы для проверки достоверности, коррекции значений и уведомлений об изменении значения.

В свойстве Location мы могли бы ввести проверку значения на равенство фразе Microsoft (в случае равенства автоматически изменить значения свойств Adress1, Adress2 и State на нужные нам значения). Ниже приведен код статического конструктора, регистрирующего пять свойств зависимости для нашей адресной формы.

static AdressCustomControl ()
{
LocationProperty = DependencyProperty.Register (
"Location", typeof(string), typeof(TextBox),
new PropertyChangedCallback (OnLacationChanged));

Adress1Property = DependencyProperty.Register (
"Adress1", typeof(string), typeof(TextBox),
new PropertyChangedCallback (null));

Adress2Property = DependencyProperty.Register (
"Adress2", typeof(string), typeof(TextBox),
new PropertyChangedCallback (null));

StateProperty = DependencyProperty.Register (
"State", typeof(string), typeof(TextBox),
new PropertyChangedCallback (null));

}

Теперь, определив свойства зависимости, можно добавить стандартные оболочки для свойств, которые облегчают доступ к ним и обеспечивают возможность обращения из XAML-разметки:

public string Location
{
get { return (string)GetValue(LocationProperty); }
set { SetValue(LocationProperty, value); }
}

...

Оболочки свойств не должны содержать никакой логики, поскольку свойства могут устанавливаться и извлекаться непосредственно с помощью методов SetValue() и GetValue() базового класса DependencyObject. Например, логика автозаполнения адреса после определения свойства Location в данном примере реализуется с использованием обратного вызова, который инициируются при изменении свойства через его оболочку, либо при прямом вызове SetValue().

private static void OnLocationChanged(DependencyObject sender,
DependencyPropertyChangedEventArgs e)
{
string newLocation = (string)e.NewValue;
AdressCustomControl adressCustomControl = (AdressCustomControl)sender;

if(newLocation.Eqals(“Microsoft”)
{
adressCustomControl.Adress1 = “One Microsoft Way”
adressCustomControl.Adress2 = “Building 10”;
adressCustomControl.State = “Redmond, WA 98052”;
}
}

Далее предоставим новый стиль для создаваемого CustomControl’a. Этот стиль будет обеспечен новым шаблоном элемента. (Если пропустить этот шаг, будет использован шаблон, определенный в базовом классе.)

Чтобы сообщить о том, что предоставляется новый стиль, следует вызвать метод OverrideMetadata() в статическом конструкторе класса. Этот метод вызывается на свойстве DefaultStyleKeyProperty, которое является свойством зависимости, определяющим стиль по умолчанию для элемента управления. Необходимый код выглядит так:

DefaultStyleKeyProperty.OverrideMetadata(typeof(AdressCustomControl),
new FrameworkPropertyMetadata(typeof(AdressCustomControl)));

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


Дата добавления: 2015-08-13; просмотров: 84 | Нарушение авторских прав


Читайте в этой же книге: Другие изменения | Версия Visual Studio 2010 позволяет проектировать приложения, ориентированные на различные версии .NET. Напишите минимально допустимую версию .NET (ответ версии через точку). | Задача 4. | Ресурсы | Основные принципы связывания | Привязка к объектам CLR | Редактирование | Краткие итоги | Задача 4. | Лекция 7. Пользовательские элементы управления. |
<== предыдущая страница | следующая страница ==>
Устанавливаем стили для элементов управления| Шаг 2. Рефакторинг кода разметки указателя цвета

mybiblioteka.su - 2015-2024 год. (0.007 сек.)