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 XmlnsDefinitionAttribute
pliku , 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ń: