Чтение онлайн

на главную

Жанры

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

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

<Grid>

</Grid>

</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:XamlSpecificStuff="http://schemas.microsoft.com/winfx/2006/xaml">

<Grid>

<!-- Кнопка со специальным содержимым -->

<Button XamlSpecificStuff:Name="button1" Height="100" Width="100">

<Ellipse Fill="Green" Height="50" Width="50"/>

</Button>

</Grid>

</Page>

Очевидный недостаток определения длинных префиксов для пространств имен 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
, который может применяться для доступа к элементам управления в этой библиотеке:

<Window x:Class="WpfApplication1.MainWindow"

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

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

xmlns:myCtrls="clr-namespace:MyControls;assembly=MyControls"

Title="MainWindow" Height="350" Width="525">

<Grid>

<myCtrls:MyCustomControl />

</Grid>

</Window>

Маркеру

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

На заметку! Если нужно определить в разметке класс, который является частью текущей сборки, но находится в другом пространстве имен .NET Core, то префикс дескриптора

xmlns
определяется без атрибута
assembly=:xmlns:myCtrls="clr-namespace:SomeNamespacelnMyApp"

Управление видимостью классов и переменных-членов

Многие ключевые слова вы увидите в действии в последующих главах там, где они потребуются; тем не менее, в качестве простого примера взгляните на следующее XAML-определение

<Window>
, в котором применяются ключевые слова
ClassModifier
и
FieldModifier
, а также
x:Name
и
х:Class
(вспомните, что редактор Kaxaml не позволяет использовать ключевые слова XAML, вовлекающие компиляцию, такие как
x:Code
,
х:FieldModifier
или
х:ClassModifier
):

Поделиться:
Популярные книги

На распутье

Кронос Александр
2. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На распутье

Идеальный мир для Лекаря 15

Сапфир Олег
15. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 15

Гром над Академией Часть 3

Машуков Тимур
4. Гром над миром
Фантастика:
фэнтези
5.25
рейтинг книги
Гром над Академией Часть 3

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

Проданная невеста

Wolf Lita
Любовные романы:
любовно-фантастические романы
5.80
рейтинг книги
Проданная невеста

Лорд Системы

Токсик Саша
1. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
4.00
рейтинг книги
Лорд Системы

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Имя нам Легион. Том 4

Дорничев Дмитрий
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 4

Безумный Макс. Ротмистр Империи

Ланцов Михаил Алексеевич
2. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
4.67
рейтинг книги
Безумный Макс. Ротмистр Империи

Наследница Драконов

Суббота Светлана
2. Наследница Драконов
Любовные романы:
современные любовные романы
любовно-фантастические романы
6.81
рейтинг книги
Наследница Драконов

Вечный. Книга III

Рокотов Алексей
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга III

Дурашка в столичной академии

Свободина Виктория
Фантастика:
фэнтези
7.80
рейтинг книги
Дурашка в столичной академии