Основи на XAML

Стандартът XAML е доста очевиден, когато разбирате някои от основните му правила:

Всеки елемент в XAML документ се преобразува в екземпляр на .NET клас. Името на елемента съвпада точно с името на класа. Например елементът казва на WPF да създаде обект Button.

Както всеки XML документ, XAML ви позволява да влагате един елемент в друг. Както ще видите, XAML дава на всеки клас гъвкавостта да решава как да се справи с тази ситуация. Гнезденето обаче обикновено е начин за изразяване на сдържаност. С други думи, ако видите елемент Button вътре в Grid елемент, тогава потребителският интерфейс може да включва Grid, съдържащ Button вътре в него.

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

Дефиниране на MainWindow в XAML

Въпреки че инструментите могат да генерират приемлив XAML, все още е важно да се разберат основите на синтаксиса на XAML и как в крайна сметка маркирането се трансформира в правилен .NET сбор. Разгледайте следния прост XAML документ, представляващ нов празен прозорец (както е създаден в Visual Studio):

В контекста на манипулатора за отваряне се задават стойностите за атрибутите Title, Height и Width, които директно се съпоставят със свойства със същото име, поддържани от типа System.Windows.Window от сборката PresentationFramework.dll.

Пространства от имена на XAML

Ясно е, че простото посочване на името на класа не е достатъчно. Анализаторът XAML също трябва да знае пространството от имена .NET, където се намира този клас. Например класът Window може да съществува в множество пространства от имена - той може да се отнася до класа System.Windows.Window, към клас в компонент на трета страна или към клас, дефиниран във вашето приложение. Анализаторът XAML изследва XML пространството от имена, към което принадлежи елементът, за да определи кой клас всъщност е необходим.

Ето как става това. В примерния документ, показан по-рано, са дефинирани две пространства от имена:

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

Основното пространство на имената на WPF. Той обхваща всички класове WPF, включително контроли, които се използват за изграждане на потребителски интерфейси (System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Ink, System.Windows.Media, System.Windows.Navigation) . В този пример това пространство от имена се декларира без префикс на пространство на имена, така че се превръща в пространство на имена по подразбиране за целия документ. С други думи, всеки елемент се поставя автоматично в това пространство от имена, освен ако не е отбелязано друго.

http://schemas.microsoft.com/winfx/2006/xaml

XAML пространство от имена. Той включва различни свойства на помощната програма XAML, които ви позволяват да повлияете на начина, по който документ се интерпретира. Това пространство от имена се преобразува в префикса x. Това означава, че може да се приложи чрез поставяне на префикс на пространство от имена пред името на елемента (както в).

Както можете да видите, XML пространството от имена не съответства на конкретно .NET пространство на имена. Има няколко причини, поради които създателите на XML са избрали това дизайнерско решение. По правило XML пространствата от имена често са под формата на URI (както в този пример). Тези URI изглеждат така, сякаш сочат към някакво място в Интернет, а всъщност не са. Използва се URI формат, тъй като прави малко вероятно различните организации да създадат по невнимание различни базирани на XML езици с едно и също пространство от имена. Тъй като домейнът schemas.microsoft.com е собственост на Microsoft, само Microsoft го използва в името на XML пространство от имена.

Друга причина за липсата на едно към едно съпоставяне между XML пространствата от имена, използвани в XAML и пространствата от имена .NET е, че това би усложнило значително XAML документите. Проблемът е, че WPF съдържа над дузина пространства от имена (всички започвайки със System.Windows). Ако всяко пространство на имена .NET е картографирано в отделно пространство на имена на XML, ще трябва да посочите правилното пространство на имена за всяка контрола, която използвате, което бързо ще доведе до объркване. Вместо това създателите на WPF са избрали да комбинират всички тези .NET пространства от имена в едно XML пространство от имена. Това работи, защото няма класове с едно и също име в различните .NET пространства от имена, които са част от WPF.

Информацията за пространството от имена позволява на анализатора XAML да намери правилния клас. Например, когато преглежда елементите Window и Grid, той вижда, че те се намират в пространството на имената по подразбиране WPF. След това търси съответстващите .NET пространства от имена - докато намери System.Windows.Window и System.Windows.Controls.Grid.

Допълнителни XAML дескриптори

Сега, ако трябва да създадете нов екземпляр на Window, който използва тези елементи, можете да зададете персонализирано XML пространство от имена, което се преобразува в библиотеката MyControls.dll с помощта на маркери clr-пространство от имена и монтаж.

По-долу е даден пример за маркиране, който създава дескрипторен префикс, който може да се използва за достъп до членовете на тази библиотека:

Маркерът clr-namespace е зададен на името на пространството от имена .NET в сглобката, докато токенът на сглобяването е зададен на приятелското име на външния сборник * .dll. Този синтаксис може да се използва за всяка външна .NET библиотека, която трябва да бъде манипулирана в рамките на маркирането.