ПредишенСледващото

WPF --- База WPF --- Определение и регистрация в зависимост от свойствата

Зависимост свойства трябва да се създаде много по-рядко от употреба. Въпреки това, има много причини, поради които трябва да създадете свой собствен зависимостта собственост. Очевидно е, че те ще бъдат ключов елемент в създаването на персонализиран елемент WPF. Но те ще трябва и когато трябва да добавите данни обвързващи, анимация, или някаква друга възможност за WPF код, които иначе не биха били в състояние да ги подкрепят. Създаване на зависимостта имот не е много трудно, въпреки че ще трябва да свикне с синтаксис. Това е съвсем различно от обичайните синтактични свойства на .NET.

Зависимост свойства могат да се добавят само зависимостите обект - класове, генерирани от DependencyObject. За щастие, повечето от ключовите компоненти на инфраструктурата WPF извлече непряко от DependencyObject. Най-очевидният пример за това е елементи поколение.

Първо трябва да се идентифицират един обект, който ще представлява имота. Това е пример на клас DependencyProperty. На информацията за собственост трябва да бъде на разположение постоянно, а може би дори други класове (както обикновено за WPF елементи). Поради тази причина DependencyProperty обект трябва да се определи като статично поле в сродна клас.

Например, FrameworkElement клас определя Марж собственост на разположение на всички елементи. Разбира се, Margin - е зависимостта собственост. Това означава, че тя се определя в FrameworkElement клас, както следва:

Той сключил споразумение, че областта, представляваща зависимост Имотът е името на обичайните свойства с добавянето на думата имота в края на краищата. По този начин е възможно да се разделят на определението на имота въз основа на името на самия имот. Невярно е определена с ключовата дума само за четене - което означава, че стойността му може да се настрои само в статичния конструктор за класа FrameworkElement, но това е следващата стъпка.

Регистрирайте зависимост имот

Определяне DependencyProperty обект е само първата стъпка. Така че можете да използвате, трябва да се регистрирате зависимост имот в WPF. Това трябва да се направи, за да използвате този имот в кода, така че определянето трябва да се направи в един статичен конструктор на свързаната клас.

WPF гарантира, че DependencyProperty обекти няма да бъде създаден директно като DependencyProperty клас не е публичен конструктор. DependencyProperty например може да се създаде само от статичен метод DependencyProperty.Register (). WPF също гарантира невъзможността за промяна DependencyProperty обекти след създаването им, като всички членове на DependencyProperty са само за четене, както и техните стойности трябва да бъдат дадени под формата на аргументи в регистъра на метод ().

Следният код е пример за създаване на DependencyProperty. Тук FrameworkElement клас използва статичен конструктор за инициализиране MarginProperty:

Регистрирайте зависимостта собственост се извършва на два етапа. Първо, вие създавате FrameworkPropertyMetadata обект, който определя кои услуги искате да използвате с имуществото на зависимост (например данни обвързващи подкрепа, анимация, и дърводобив). Тогава регистрирана собственост, която е причинена метод DependencyProperty.Register (). Тук трябва да се определят няколко основни съставки:

Име на имота (в този пример Margin);

тип данни използва собственост (в този пример Дебелина структура);

тип, който принадлежи към този комплекс (в този пример FrameworkElement клас);

FrameworkPropertyMetadata възрази имоти с допълнителни параметри (по избор);

обаждане по силата на което свойства валидиране (по желание).

всичко изглежда ясно от първите три съставки. По-интересни са FrameworkPropertyMetadata обект и проверка обаждане.

FrameworkPropertyMetadata обект, използван за създаване на възможност за създаване на зависимост собственост. Повечето от имоти FrameworkPropertyMetadata клас е нормална логика знамена, които са дадени, за да активирате тези опции (по подразбиране, всички тези знамена са фалшиви). Но някои от тях са обратни повиквания, които сочат към потребителски методи, създадени за конкретни задачи. Един от тези имоти - FrameworkPropertyMetadata.DefaultValue - създава стойност по подразбиране, който ще се прилага, когато WPF оригинален инициализация свойства. По-долу са всички FrameworkPropertyMetadata на имоти:

Клас имоти FrameworkPropertyMetadata

AffectsArrange, AffectsMeasure, AffectsParentArrange, AffectsParentMeasure

Ако истинска стойност, собственост на зависимост може да повлияе на местоположението на съседни елементи (или родител) по време на подреждането схема за измерване фаза и фаза в експлоатация. Например, границата на собственост зависимост влиза в AffectsMeasure стойност вярно - това означава, че когато поле оформление елементи контейнер трябва да се повтаря стъпка измерване за определяне на нови елементи за разположения

Ако това е вярно, тогава имотът може да бъде засегнат в зависимост от появата на един елемент, който изисква преначертаване

Ако това е вярно, тогава имотът ще се използва в зависимост от това не едностранно (по подразбиране), и задължителни двупосочни данни. Въпреки това, при създаването на задължителен, можете да укажете в поведението си

Ако една истинска стойност, стойността на разпределените в зависимост от дървени елементи и могат да бъдат наследени вложени елементи. Например, наследен зависимост имот е на шрифта: ако го настроите да се елемент на най-високо ниво, той е наследен от вложените елементи, освен ако изрично отменени собствени настройки на шрифтовете

Ако това е вярно, тогава имотът не може да се използва в зависимост от анимация

Ако това е вярно, то стойността на имота не може да се определи в зависимост от свързването израз

Ако е вярно, стойността собственост на зависимостта към страницата с добавка се съхранява в дневника (историята на посетените страници)

Ако една истинска стойност, WPF няма да изпълнява преначертаване на обекта, когато един от неговите подсвойства (свойства свойства)

Тя определя стойността по подразбиране за Binding.UpdateSourceTrigger на собственост, когато имотът се използва в задължителен условия. UpdateSourceTrigger собственост определя кога промените в граница. UpdateSourceTrigger имот може да се настрои ръчно при създаване на автомати

Тя определя стойността по подразбиране за свойства, в зависимост

Тя осигурява обаждане, че се опитва да "оправи" стойността на имота, преди да проверите

Подкрепете проекта - споделете линка, благодаря!