KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Перейти на страницу:

</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;

    &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.

Язык программирования C#9 и платформа .NET5 - _186.png

В дополнение к двум указанным объявлениям пространств имен 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 для описания типов в разметке.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*