Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
</Page>Первое пространство имен XML,
http://schemas.microsoft.com/winfx/2006/xaml/presentation*.xamlSystem.WindowsSystem.Windows.ControlsSystem.Windows.DataSystem.Windows.InkSystem.Windows.MediaSystem.Windows.NavigationЭто отображение "один ко многим" в действительности жестко закодировано внутри сборок WPF (
WindowsBase.dllPresentationCore.dllPresentationFramework.dll[XmlnsDefinition]PresentationCore.dllSystem.Windows[assembly: XmlnsDefinition( "http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows")]Второе пространство имен XML,
http://schemas.microsoft.com/winfx/2006/xamlSystem.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>="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <!-- Кнопка со специальным содержимым --> <Button <b>XamlSpecificStuff</b>:Name="button1" Height="100" Width="100"> <Ellipse Fill="Green" Height="50" Width="50"/> </Button> </Grid></Page>Очевидный недостаток определения длинных префиксов для пространств имен XML связан с тем, что
XamlSpecificStuffXamlSpecificStuffхПомимо ключевых слов
x:Nameх:Classx:Codehttp://schemas.microsoft.com/winfх/2006/xaml
В дополнение к двум указанным объявлениям пространств имен XML можно (а иногда и нужно) определить дополнительные префиксы дескрипторов в открывающем элементе документа XAML. Обычно так поступают, когда необходимо описать в XAML класс .NET Core, определенный во внешней сборке.
Например, предположим, что было построено несколько специальных элементов управления WPF, которые упакованы в библиотеку по имени
MyControls.dllMyControls.dllclr-namespaceassemblymyCtrls<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<b> xmlns:myCtrls="clr-namespace:MyControls;assembly=MyControls"</b> Title="MainWindow" Height="350" Width="525"> <Grid><b> <myCtrls:MyCustomControl /></b> </Grid></Window>Маркеру
clr-namespaceassembly*.dll