Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 476 477 478 479 480 481 482 483 484 ... 642

</Page>

Первое пространство имен XML, http://schemas.microsoft.com/winfx/2006/xaml/presentation, отображает множество связанных c WPF пространств имен .NET для использования текущим файлом *.xaml (System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Ink, System.Windows.Media, System.Windows.Navigation и т.д.).

Это отображение "один ко многим" в действительности жестко закодировано внутри сборок WPF (WindowsBase.dll, PresentationCore.dll и PresentationFramework.dll) с применением атрибута [XmlnsDefinition] уровня сборки. Например, если открыть браузер объектов Visual Studio и выбрать сборку PresentationCore.dll, то можно увидеть списки, подобные показанному ниже, в котором импортируется пространство имен System.Windows:

[assembly: XmlnsDefinition(

    "http://schemas.microsoft.com/winfx/2006/xaml/presentation",

    "System.Windows")]

Второе пространство имен XML, http://schemas.microsoft.com/winfx/2006/xaml, используется для добавления специфичных для XAML "ключевых слов" (термин выбран за неимением лучшего), а также пространства имен System.Windows.Markup:

[assembly: XmlnsDefinition(

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

    "System.Windows.Markup")]

Одно из правил любого корректно сформированного документа XML (не забывайте, что грамматика XAML основана на XML) состоит в том, что открывающий корневой элемент назначает одно пространство имен XML в качестве первичного пространства имен, которое обычно представляет собой пространство имен, содержащее самые часто применяемые элементы. Если корневой элемент требует включения дополнительных вторичных пространств имен (как видно здесь), то они должны быть определены с использованием уникального префикса (чтобы устранить возможные конфликты имен). По соглашению для префикса применяется просто х, однако он может быть любым уникальным маркером, таким как XamlSpecificStuff:

<Page

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

  xmlns:<b>XamlSpecificStuff</b>=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&gt;

  &lt;Grid&gt;

    &lt;!-- Кнопка со специальным содержимым --&gt;

    &lt;Button <b>XamlSpecificStuff</b>:Name=&quot;button1&quot; Height=&quot;100&quot; Width=&quot;100&quot;&gt;

      &lt;Ellipse Fill=&quot;Green&quot; Height=&quot;50&quot; Width=&quot;50&quot;/&gt;

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

    &lt;/Button&gt;

  &lt;/Grid&gt;

&lt;/Page&gt;

Очевидный недостаток определения длинных префиксов для пространств имен XML связан с тем, что XamlSpecificStuff придется набирать всякий раз, когда в файле XAML нужно сослаться на один из элементов, определенных в этом пространстве имен XML. Из-за того, что префикс XamlSpecificStuff намного длиннее, давайте ограничимся х.

Помимо ключевых слов x:Name, х:Class и x:Code пространство имен http://schemas.microsoft.com/winfх/2006/xaml также предоставляет доступ к дополнительным ключевым словам XAML, наиболее распространенные из которых кратко описаны в табл. 24.9.

В дополнение к двум указанным объявлениям пространств имен XML можно (а иногда и нужно) определить дополнительные префиксы дескрипторов в открывающем элементе документа XAML. Обычно так поступают, когда необходимо описать в XAML класс .NET Core, определенный во внешней сборке.

Например, предположим, что было построено несколько специальных элементов управления WPF, которые упакованы в библиотеку по имени MyControls.dll. Если теперь требуется создать новый объект Window, в котором применяются созданные элементы, то можно установить специальное пространство имен XML, отображаемое на библиотеку MyControls.dll, с использованием маркеров clr-namespace и assembly. Ниже приведен пример разметки, создающей префикс дескриптора по имени myCtrls, который может применяться для доступа к элементам управления в этой библиотеке:

&lt;Window x:Class=&quot;WpfApplication1.MainWindow&quot;

  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;

  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;

<b>  xmlns:myCtrls=&quot;clr-namespace:MyControls;assembly=MyControls&quot;</b>

  Title=&quot;MainWindow&quot; Height=&quot;350&quot; Width=&quot;525&quot;&gt;

  &lt;Grid&gt;

<b>    &lt;myCtrls:MyCustomControl /&gt;</b>

  &lt;/Grid&gt;

&lt;/Window&gt;

Маркеру clr-namespace назначается название пространства имен .NET Core в сборке, в то время как маркер assembly устанавливается в дружественное имя внешней сборки *.dll. Такой синтаксис можно использовать для любой внешней библиотеки .NET Core, которой желательно манипулировать внутри разметки. В настоящее время в этом нет необходимости, но в последующих главах понадобится определять специальные объявления пространств имен XML для описания типов в разметке.

1 ... 476 477 478 479 480 481 482 483 484 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий