Aracılığıyla paylaş


içinde XAML Özel Ad Alanı Şemaları Xamarin.Forms

Kitaplıktaki türlere, kitaplık için bir XAML ad alanı bildirilerek, ad alanı bildirimi Ortak Dil Çalışma Zamanı (CLR) ad alanı adını ve bir derleme adını belirterek XAML'de başvurulabilir:

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

Ancak, bir tanımda xmlns CLR ad alanı ve derleme adı belirtmek garip olabilir ve hataya açık olabilir. Ayrıca, kitaplık birden çok ad alanında türler içeriyorsa, birden çok XAML ad alanı bildirimi gerekebilir.

Alternatif bir yaklaşım, bir veya daha fazla CLR ad alanına eşleyen gibi http://mycompany.com/schemas/controlsözel bir ad alanı şeması tanımlamaktır. Bu, tek bir XAML ad alanı bildiriminin, farklı ad alanları içinde olsalar bile bir derlemedeki tüm türlere başvurmasını sağlar. Ayrıca, birden çok derlemedeki türlere başvurmak için tek bir XAML ad alanı bildirimini etkinleştirir.

XAML ad alanları hakkında daha fazla bilgi için bkz . içindeki Xamarin.FormsXAML Ad Alanları.

Özel ad alanı şeması tanımlama

Örnek uygulama, gibi CircleButtonbazı basit denetimleri kullanıma sunan bir kitaplık içerir:

using Xamarin.Forms;

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

Kitaplıktaki tüm denetimler ad alanında MyCompany.Controls bulunur. Bu denetimler özel bir ad alanı şeması aracılığıyla çağrı derlemesine gösterilebilir.

Özel ad alanı şeması, XAML ad alanı ile bir veya daha fazla CLR ad alanı arasındaki eşlemeyi belirten sınıfıyla XmlnsDefinitionAttribute tanımlanır. XmlnsDefinitionAttribute iki bağımsız değişken alır: XAML ad alanı adı ve CLR ad alanı adı. XAML ad alanı adı özelliğinde XmlnsDefinitionAttribute.XmlNamespace depolanır ve CLR ad alanı adı özelliğinde XmlnsDefinitionAttribute.ClrNamespace depolanır.

Not

sınıfı, XmlnsDefinitionAttribute isteğe bağlı olarak derlemenin adına ayarlanabilen adlı AssemblyNamebir özelliğe de sahiptir. Bu, yalnızca 'dan XmlnsDefinitionAttribute başvurulan bir CLR ad alanı bir dış derlemede olduğunda gereklidir.

, XmlnsDefinitionAttribute özel ad alanı şemasında eşlenecek CLR ad alanlarını içeren projede derleme düzeyinde tanımlanmalıdır. Aşağıdaki örnekte örnek uygulamadaki AssemblyInfo.cs dosyası gösterilmektedir:

using Xamarin.Forms;
using MyCompany.Controls;

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

Bu kod, URL'yi MyCompany.Controls CLR ad alanına eşleyen http://mycompany.com/schemas/controls özel bir ad alanı şeması oluşturur. Ek olarak, bağlayıcının Preserve derlemedeki tüm türleri koruduğundan emin olmak için özniteliği derlemede belirtilir.

Önemli

özniteliği, Preserve özel ad alanı şemasıyla eşlenen derlemedeki sınıflara veya derlemenin tamamına uygulanmalıdır.

Özel ad alanı şeması daha sonra XAML dosyalarında tür çözümlemesi için kullanılabilir.

Özel ad alanı şeması kullanma

Özel ad alanı şemasından türleri kullanmak için XAML derleyicisi, türleri kullanan derlemeden türleri tanımlayan derlemeye bir kod başvurusu olmasını gerektirir. Bu, XAML aracılığıyla kullanılacak türleri tanımlayan derlemeye bir yöntem içeren bir Init sınıf eklenerek gerçekleştirilebilir:

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

Yöntemi Init daha sonra özel ad alanı şemasından türleri kullanan derlemeden çağrılabilir:

using Xamarin.Forms;
using MyCompany.Controls;

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

Uyarı

Böyle bir kod başvurusunun dahil edilememesi, XAML derleyicisinin özel ad alanı şema türlerini içeren derlemeyi bulamamasına neden olur.

Denetimi kullanmak CircleButton için bir XAML ad alanı bildirilir ve ad alanı bildirimi özel ad alanı şema URL'sini belirtir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:controls="http://mycompany.com/schemas/controls"
             x:Class="CustomNamespaceSchemaDemo.MainPage">
    <StackLayout Margin="20,35,20,20">
        ...
        <controls:CircleButton Text="+"
                               BackgroundColor="Fuchsia"
                               BorderColor="Black"
                               CircleDiameter="100" />
        <controls:CircleButton Text="-"
                               BackgroundColor="Teal"
                               BorderColor="Silver"
                               CircleDiameter="70" />
        ...
    </StackLayout>
</ContentPage>

CircleButtonörnekler daha sonra ad alanı ön eki ile controls bildirilerek öğesine eklenebilirContentPage.

Özel ad alanı şema türlerini bulmak için başvuruda Xamarin.Forms bulunılan derlemelerde örnekler arar XmlnsDefinitionAttribute . xmlns XAML dosyasındaki bir öğenin özniteliği içindeki özellik değeriyle XmlnsDefinitionAttributeXamarin.Forms eşleşiyorsaXmlNamespace, türün XmlnsDefinitionAttribute.ClrNamespace çözümü için özellik değerini kullanmayı dener. Tür çözümlemesi başarısız olursa, Xamarin.Forms eşleşen XmlnsDefinitionAttribute ek örneklere göre tür çözümlemeyi denemeye devam eder.

Sonuç olarak iki CircleButton örnek görüntülenir:

Daire düğmeleri