Udostępnij za pośrednictwem


Schematy niestandardowych przestrzeni nazw

Do typów w bibliotece interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) można odwoływać się w języku XAML, deklarując przestrzeń nazw XML dla biblioteki z deklaracją przestrzeni nazw określającą nazwę przestrzeni nazw środowiska uruchomieniowego języka wspólnego (CLR) i nazwę zestawu:

<ContentPage ...
             xmlns:controls="clr-namespace:MyCompany.Controls;assembly=MyCompany.Controls">
    ...
</ContentPage>

Jednak określenie przestrzeni nazw CLR i nazwy zestawu w xmlns definicji może być niewygodne i podatne na błędy. Ponadto wiele deklaracji przestrzeni nazw XML może być wymaganych, jeśli biblioteka zawiera typy w wielu przestrzeniach nazw.

Alternatywną metodą jest zdefiniowanie niestandardowego schematu przestrzeni nazw, takiego jak http://mycompany.com/schemas/controls, który jest mapowy na co najmniej jedną przestrzeń nazw CLR. Dzięki temu jedna deklaracja przestrzeni nazw XML może odwoływać się do wszystkich typów w zestawie, nawet jeśli znajdują się w różnych przestrzeniach nazw. Umożliwia również pojedynczej deklaracji przestrzeni nazw XML odwołania do typów w wielu zestawach.

Aby uzyskać więcej informacji na temat przestrzeni nazw XAML, zobacz Przestrzenie nazw XAML.

Definiowanie niestandardowego schematu przestrzeni nazw

Wyobraź sobie bibliotekę, która uwidacznia kilka prostych kontrolek, takich jak CircleButton:

namespace MyCompany.Controls
{
    public class CircleButton : Button
    {
        ...
    }
}

Wszystkie kontrolki w bibliotece znajdują się w MyCompany.Controls przestrzeni nazw. Te kontrolki mogą być widoczne dla zestawu wywołującego za pomocą niestandardowego schematu przestrzeni nazw.

Niestandardowy schemat przestrzeni nazw jest definiowany z XmlnsDefinitionAttribute klasą, która określa mapowanie między przestrzenią nazw XAML i co najmniej jedną przestrzenią nazw CLR. Przyjmuje XmlnsDefinitionAttribute dwa argumenty: nazwę przestrzeni nazw XAML i nazwę przestrzeni nazw CLR. Nazwa przestrzeni nazw XAML jest przechowywana we XmlnsDefinitionAttribute.XmlNamespace właściwości, a nazwa przestrzeni nazw CLR jest przechowywana we XmlnsDefinitionAttribute.ClrNamespace właściwości .

Uwaga

Klasa XmlnsDefinitionAttribute ma również właściwość o nazwie AssemblyName, którą można opcjonalnie ustawić na nazwę zestawu. Jest to wymagane tylko wtedy, gdy przestrzeń nazw CLR, do których odwołuje się element , XmlnsDefinitionAttribute znajduje się w zestawie zewnętrznym.

Element XmlnsDefinitionAttribute powinien być zdefiniowany na poziomie zestawu w projekcie zawierającym przestrzenie nazw CLR, które zostaną zamapowane w niestandardowym schemacie przestrzeni nazw:

using MyCompany.Controls;

[assembly: XmlnsDefinition("http://mycompany.com/schemas/controls", "MyCompany.Controls")]

Ten kod tworzy niestandardowy schemat przestrzeni nazw, który mapuje http://mycompany.com/schemas/controls adres URL na MyCompany.Controls przestrzeń nazw CLR.

Ważne

Należy poinstruować konsolidatora, aby zachował typy w zestawie, które są mapowane za pomocą niestandardowego schematu przestrzeni nazw, lub zachować cały zestaw. Aby uzyskać więcej informacji, zobacz Zachowywanie kodu.

Niestandardowy schemat przestrzeni nazw może być następnie używany do rozpoznawania typów w plikach XAML.

Korzystanie ze niestandardowego schematu przestrzeni nazw

Aby korzystać z typów ze schematu niestandardowej przestrzeni nazw, kompilator XAML wymaga odwołania do kodu z zestawu, który używa typów, do zestawu definiującego typy. Można to zrobić, dodając klasę zawierającą metodę Init do zestawu, która definiuje typy, które będą używane za pomocą języka XAML:

namespace MyCompany.Controls
{
    public static class Controls
    {
        public static void Init()
        {
        }
    }
}

Init Następnie można wywołać metodę z zestawu, który korzysta z typów ze schematu niestandardowej przestrzeni nazw:

using MyCompany.Controls;

namespace CustomNamespaceSchemaDemo
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            Controls.Init();
            InitializeComponent();
        }
    }
}

Ostrzeżenie

Brak dołączenia takiego odwołania do kodu spowoduje, że kompilator XAML nie może zlokalizować zestawu zawierającego niestandardowe typy schematów przestrzeni nazw.

Aby użyć kontrolki CircleButton , zadeklarowana jest przestrzeń nazw XAML z deklaracją przestrzeni nazw określającą niestandardowy adres URL schematu przestrzeni nazw:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:controls="http://mycompany.com/schemas/controls"
             x:Class="CustomNamespaceSchemaDemo.MainPage">
    <StackLayout>
        ...
        <controls:CircleButton Text="+"
                               BackgroundColor="Fuchsia"
                               BorderColor="Black"
                               CircleDiameter="100" />
        <controls:CircleButton Text="-"
                               BackgroundColor="Teal"
                               BorderColor="Silver"
                               CircleDiameter="70" />
        ...
    </StackLayout>
</ContentPage>

CircleButton wystąpienia można następnie dodać do obiektu ContentPage , deklarując je przy użyciu prefiksu controls przestrzeni nazw.

Aby znaleźć niestandardowe typy schematów przestrzeni nazw, program .NET MAUI wyszuka przywoływane zestawy dla XmlnsDefinitionAttribute wystąpień. xmlns Jeśli atrybut elementu w pliku XAML jest zgodny XmlNamespace z wartością właściwości w XmlnsDefinitionAttributepliku , program .NET MAUI spróbuje użyć XmlnsDefinitionAttribute.ClrNamespace wartości właściwości do rozpoznawania typu. Jeśli rozpoznawanie typów nie powiedzie się, program .NET MAUI będzie nadal podejmować próby rozpoznawania typów na podstawie dodatkowych pasujących XmlnsDefinitionAttribute wystąpień.

Wynikiem jest wyświetlenie dwóch CircleButton wystąpień:

Screenshot of two circle buttons.