사용자 지정 네임스페이스 스키마
.NET 다중 플랫폼 앱 UI(.NET MAUI) 라이브러리의 형식은 CLR(공용 언어 런타임) 네임스페이스 이름과 어셈블리 이름을 지정하는 네임스페이스 선언과 함께 라이브러리에 대한 XML 네임스페이스를 선언하여 XAML에서 참조할 수 있습니다.
<ContentPage ...
xmlns:controls="clr-namespace:MyCompany.Controls;assembly=MyCompany.Controls">
...
</ContentPage>
그러나 정의에 CLR 네임스페이스 및 어셈블리 이름을 지정하는 것은 xmlns
어색하고 오류가 발생하기 쉽습니다. 또한 라이브러리에 여러 네임스페이스의 형식이 포함된 경우 여러 XML 네임스페이스 선언이 필요할 수 있습니다.
다른 방법은 하나 이상의 CLR 네임스페이스에 매핑되는 사용자 지정 네임스페이스 스키마(예: http://mycompany.com/schemas/controls
사용자 지정 네임스페이스 스키마)를 정의하는 것입니다. 이렇게 하면 단일 XML 네임스페이스 선언이 다른 네임스페이스에 있더라도 어셈블리의 모든 형식을 참조할 수 있습니다. 또한 단일 XML 네임스페이스 선언을 사용하여 여러 어셈블리의 형식을 참조할 수 있습니다.
XAML 네임스페이스에 대한 자세한 내용은 XAML 네임스페이스를 참조 하세요.
사용자 지정 네임스페이스 스키마 정의
다음과 같은 CircleButton
몇 가지 간단한 컨트롤을 노출하는 라이브러리를 상상해 보세요.
namespace MyCompany.Controls
{
public class CircleButton : Button
{
...
}
}
라이브러리의 모든 컨트롤은 네임스페이스에 MyCompany.Controls
있습니다. 이러한 컨트롤은 사용자 지정 네임스페이스 스키마를 통해 호출 어셈블리에 노출될 수 있습니다.
사용자 지정 네임스페이스 스키마는 XAML 네임스페이스와 하나 이상의 CLR 네임스페이스 간의 매핑을 지정하는 클래스로 정의 XmlnsDefinitionAttribute
됩니다. XAML XmlnsDefinitionAttribute
네임스페이스 이름과 CLR 네임스페이스 이름의 두 인수를 사용합니다. XAML 네임스페이스 이름은 속성에 XmlnsDefinitionAttribute.XmlNamespace
저장되고 CLR 네임스페이스 이름은 속성에 XmlnsDefinitionAttribute.ClrNamespace
저장됩니다.
참고 항목
클래스에는 XmlnsDefinitionAttribute
어셈블리의 이름으로 선택적으로 설정할 수 있는 이름이 있는 AssemblyName
속성도 있습니다. 이는 A에서 XmlnsDefinitionAttribute
참조된 CLR 네임스페이스가 외부 어셈블리에 있는 경우에만 필요합니다.
사용자 XmlnsDefinitionAttribute
지정 네임스페이스 스키마에 매핑될 CLR 네임스페이스가 포함된 프로젝트의 어셈블리 수준에서 정의해야 합니다.
using MyCompany.Controls;
[assembly: XmlnsDefinition("http://mycompany.com/schemas/controls", "MyCompany.Controls")]
이 코드는 URL을 CLR 네임스페이스에 매핑 http://mycompany.com/schemas/controls
하는 사용자 지정 네임스페이스 스키마를 MyCompany.Controls
만듭니다.
Important
사용자 지정 네임스페이스 스키마를 통해 매핑된 어셈블리의 형식을 유지하거나 전체 어셈블리를 유지하도록 링커에 지시해야 합니다. 자세한 내용은 코드 유지를 참조 하세요.
그런 다음 사용자 지정 네임스페이스 스키마를 XAML 파일의 형식 확인에 사용할 수 있습니다.
사용자 지정 네임스페이스 스키마 사용
사용자 지정 네임스페이스 스키마에서 형식을 사용하려면 XAML 컴파일러에서 형식을 사용하는 어셈블리에서 형식을 정의하는 어셈블리에 대한 코드 참조가 있어야 합니다. 이 작업은 XAML을 통해 사용될 형식을 정의하는 메서드를 포함하는 Init
클래스를 어셈블리에 추가하여 수행할 수 있습니다.
namespace MyCompany.Controls
{
public static class Controls
{
public static void Init()
{
}
}
}
Init
그런 다음, 사용자 지정 네임스페이스 스키마의 형식을 사용하는 어셈블리에서 메서드를 호출할 수 있습니다.
using MyCompany.Controls;
namespace CustomNamespaceSchemaDemo
{
public partial class MainPage : ContentPage
{
public MainPage()
{
Controls.Init();
InitializeComponent();
}
}
}
Warning
이러한 코드 참조를 포함하지 않으면 XAML 컴파일러가 사용자 지정 네임스페이스 스키마 형식이 포함된 어셈블리를 찾을 수 없게 됩니다.
컨트롤을 CircleButton
사용하려면 사용자 지정 네임스페이스 스키마 URL을 지정하는 네임스페이스 선언과 함께 XAML 네임스페이스가 선언됩니다.
<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
그런 다음 네임스페이스 접두사를 사용하여 선언하여 인스턴스를 controls
추가할 ContentPage 수 있습니다.
사용자 지정 네임스페이스 스키마 유형을 찾기 위해 .NET MAUI는 참조된 어셈블리에서 인스턴스를 XmlnsDefinitionAttribute
검색합니다. xmlns
XAML 파일의 요소에 대한 특성이 속성 값XmlnsDefinitionAttribute
과 일치하는 XmlNamespace
경우 .NET MAUI는 형식의 확인을 위해 속성 값을 사용 XmlnsDefinitionAttribute.ClrNamespace
하려고 시도합니다. 형식 확인에 실패하면 .NET MAUI는 일치하는 XmlnsDefinitionAttribute
추가 인스턴스에 따라 형식 확인을 계속 시도합니다.
그 결과 두 개의 CircleButton
인스턴스가 표시됩니다.
.NET MAUI