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

  1. въведение
  2. Обхват на променливите
  3. излагайки магия
  4. Как да създадете зависими имоти
  5. Зависимите само за четене имоти
  6. Вложени зависими свойства
  7. Проследяване на промени в зависимите свойства
  8. Как да се почисти локална променлива

Когато започнете да се развива вашата кандидатура WPF, скоро ще се проведе в "Зависими Имоти» (DepedencyProperties). Те са почти същите като на нормалните .NET свойства, но идеята е много по-сложни и по-функционални.

Основната разлика се състои в това, че променливата в нормалния .NET Имотът се чете от частна член на класа, а той се нарича DependencyProperty динамично, когато се обадите на GetValue (), което от своя страна е наследен от DepedencyObject.

Когато зададете стойност за зависими имота, тя не се съхранява в областта на вашия обект, и се съхранява в речника ключове и стойности, предоставени от DependencyObject базовия клас. Въведена ключът е името на собственост, а променливата е стойността, която искате да инсталирате.

Предимства зависими свойства:

поле за съхранение за всеки имот е огромна загуба на ресурси, особено когато си мислиш, че повече от 90% от функциите на потребителския интерфейс обикновено остава в първоначалното състояние. Зависимите свойства решаване на този проблем, като съхранява само променените свойства. Стойностите на "по подразбиране" се съхраняват само веднъж.

Когато посетите стойност на зависимостта имот е част от използването на определени техники. Ако местната стойност все още не е зададен, зависи имот върви нагоре логическото дърво, докато намери тази стойност. Когато зададете опцията FONTSIZE за корен (най-високо ниво елемент) на параметърът автоматично се дава на всички текстовите полета по-ниско ниво, с изключение на тези, които са били обект на изключение.

Зависимите свойства имат вградена механизъм за уведомяване за промени. При регистриране на обратно повикване (обаждане) в метаданните, вие ще знаете, когато стойността на имота или е бил променен. Този механизъм се използва също и при използване на задължителен за данни.

Обхват на променливите

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

Блог архив - зависими имоти

магия излагане ...

Всеки се регистрирате контрол WPF е настроен зависими имоти, клас Зависимост на имота. Всеки от тях се състои от ключ, който трябва да е уникално за вида; и метаданни, съдържащи обаждане и стойности по подразбиране.

Всички видове, ползващи DependencyProperties, трябва да бъдат наследени от зависимостта на обекта. Този базов клас се определи ключа и стойността на речника, който включва местните ценности зависими свойства. Т.е. вход за ключ е ключът, който е посочен на зависимостта собственост.

При достъп до зависимостта на свойствата чрез обвивки на свойствата на .NET, наречена GetValue (DependencyProperty) за достъп до стойност. Този метод получава стойността, като се използва процедурата, показана на снимката по-долу. Ако наличието на локална променлива, тя се чете директно, без речник. Ако променливата липсва, той отива до логичното дърво и търси наследствено стойност. Ако не се намери стойността, отнема стойността по подразбиране, определен в свойствата на метаданни. Тази последователност е малко по-опростена, но показва основната концепция на механизъм работи.

Блог архив - зависими имоти

Как да създадете зависими имоти?

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

С цел да се позволи достъп до него, като нормален .NET собственост, трябва да се създаде обвивка за този имот. Тази обвивка не прави нищо, но получава и определя стойността на използването на метода на GetValue () и SetValue (), наследена от DependencyObject и предава зависимост имот - DependencyProperty като ключов.

[Важно]: Не добавяйте логика в тези имоти, защото те са прави само веднъж, само когато зададете собственост на кода. Ако зададете на имота от XAML, метод SetValue () се нарича директно.

Ако сте с помощта на среда за разработка VisualStudio, можете да отпечатате «propdp» и кликнете два пъти върху TAB. за създаване на зависими собственост.

Всяка зависимост имот е снабден с функция за обратно извикване за целите на възможности за уведомяване, стойността на задържане, или проверка.

Известие за промяна на стойността (обаждане)

Известие за промяна на стойността е статичен метод, който се нарича всеки път, когато TimeProperty на стойност. Новата стойност се предава в EventArgs; обекта, който се променя стойност се предава като източник.

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

Принудително обаждане ви позволява да настроите стойността, ако тя е извън обхват, без изключение. Добър пример е лентата за зареждане, чиято стойност може да е под минималното или над максимума. В този случай, ние можем да принуди стойност в рамките на ограниченията. Този екран показва начина, по който определя срока, за да се запази това време в миналото.

Проверка на стойности (обратно повикване)

Изпитвайки стойности за коректност, можете да проверите дали стойността е валидна. Ако тя се връща фалшиви, а след това ще хвърли изключение ArgumentException. В този пример, изисква, че данните не са изключение DateTime.

Зависимите свойства само за четене

Някои зависими имоти в контроли WPF са само за четене. Те често се използват за наблюдение на състоянието на контрола. Например, IsMouseOver собственост. Не е необходимо да се определят всяка стойност на този имот.

Може би ще се запитате, защо не се използва нормално .NET имот? Една от основните причини е, че не можете да зададете спусъка нормално .NET собственост.

Създаване на имоти, само за четене, подобно на създаването обикновен DependencyProperty.Insted. Вместо да се обадите DependencyProperty.Register () ти се обадя DependencyProperty.RegisterReadonly (). Това ви носи DependencyPropertyKey. Този ключ трябва да се съхранява в частен или защитени статично, само за четене, поле на класа си. Ключът ви дава достъп до стойността за настройка в рамките на вашия клас, и можете да го използвате като нормален зависимостта собственост.

Второто нещо, което трябва да направите е да се регистрирате на обществена зависимостта собственост, която е насрочена за DependencyPropertyKey.DependencyProperty. Този имот е само за четене, с присъствието на външен достъп.

Приложени имоти

Приложени имоти са специален вид DependencyProperty. Те ви позволяват да определя стойността на един обект, който не знае нищо за тази стойност.

Един добър пример е механизъм за местоположение панел. Всеки панел изисква различни данни, способността да се приведе в съответствие своите подчинени елементи. Работна повърхност (платно), необходими параметри и горе вляво. Прикачените панели изисква параметри док т.н. И накрая, можете да напишете своето собствено оформление панел оформление, списъкът е безкраен. Вие виждате, че е невъзможно да има същите свойства във всички контроли WPF.

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

За да настроите стойността на имота прикрепен, добавете XAML атрибут префикс елемент, който осигурява прикрепен собственост. За да зададете свойствата и бутон Canvas.Top Canvas.Left се привеждат в съответствие в рамките на работната повърхност. Можете да напишете:

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

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

Как да се почисти местно значение?

NULL - също е правилното местно стойност. Според това, налице е постоянна DependencyProperty.UnsetValue, която описва неопределена стойност.

Свързани статии

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