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 CircleButton
bazı 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ı AssemblyName
bir ö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 XmlnsDefinitionAttribute
Xamarin.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: