içinde XAML Özel Ad Alanı Şemaları Xamarin.Forms
Kitaplıkta türlere, ortak dil çalışma zamanı (CLR) ad alanı adını ve derleme adını belirten ad alanı bildirimiyle birlikte, kitaplık için bir XAML ad alanı bildirerek XAML'de başvurulabilirsiniz:
<ContentPage ...
xmlns:controls="clr-namespace:MyCompany.Controls;assembly=MyCompany.Controls">
...
</ContentPage>
Ancak, bir tanımda CLR ad alanı ve derleme adı belirtmek garip xmlns olabilir ve hataya açık olabilir. Ayrıca, kitaplık birden çok ad alanı türü içeriyorsa birden çok XAML ad alanı bildirimi gerekebilir.
Alternatif bir yaklaşım, gibi bir veya daha fazla CLR ad http://mycompany.com/schemas/controls alanına eşleyici özel bir ad alanı şeması tanımlamaktır. Bu, tek bir XAML ad alanı bildiriminin, farklı ad alanlarında olsalar bile bir derlemedeki tüm türlere başvurup göndermesini sağlar. Ayrıca, birden çok derlemedeki başvuru türlerine tek bir XAML ad alanı bildirimi sağlar.
XAML ad alanları hakkında daha fazla bilgi için bkz. XAML Namespaces in Xamarin.Forms .
Özel ad alanı şeması tanımlama
Örnek uygulama, gibi bazı basit denetimleri ortaya çıkaran bir kitaplık CircleButton içerir:
using Xamarin.Forms;
namespace MyCompany.Controls
{
public class CircleButton : Button
{
...
}
}
Kitaplıkta tüm denetimler ad alanına MyCompany.Controls yer verir. Bu denetimler, özel bir ad alanı şeması aracılığıyla bir çağrı derlemesi için kullanılabilir.
Özel bir ad alanı şeması, bir XAML ad alanı ile bir veya daha fazla CLR ad alanı arasındaki eşlemeyi belirten XmlnsDefinitionAttribute sınıfıyla 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ı XmlnsDefinitionAttribute.XmlNamespace özelliğinde, CLR ad alanı adı ise özelliğinde XmlnsDefinitionAttribute.ClrNamespace depolanır.
Not
sınıfında XmlnsDefinitionAttribute ayrıca, isteğe bağlı olarak derlemenin adına AssemblyName ayarlanabiliyor adlı bir özelliği vardır. Bu yalnızca, bir'den başvurulan CLR ad alanı bir XmlnsDefinitionAttribute dış derlemede olduğunda gereklidir.
, özel ad alanı şemasında eşlenen CLR ad alanlarını içeren projesinde XmlnsDefinitionAttribute derleme düzeyinde tanımlanmalıdır. Aşağıdaki örnek, örnek uygulamanın AssemblyInfo.cs dosyasını gösterir:
using Xamarin.Forms;
using MyCompany.Controls;
[assembly: Preserve]
[assembly: XmlnsDefinition("http://mycompany.com/schemas/controls", "MyCompany.Controls")]
Bu kod, URL'yi CLR ad http://mycompany.com/schemas/controls alanıyla eş alan özel MyCompany.Controls bir ad alanı şeması oluşturur. Ek olarak, Preserve özniteliği, bağlantıcının derlemede tüm türleri korumasını sağlamak için derlemede belirtilir.
Önemli
özniteliği, özel ad alanı şeması aracılığıyla eşlenen veya derlemenin tamamına uygulanan derleme Preserve sınıfları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ını tüketma
XAML derleyicisi, özel ad alanı şemasındaki türleri kullanmak için türleri tüketen derlemeden türleri tanımlayan derlemeye bir kod başvurusu gerektirir. Bu, XAML aracılığıyla tüketilen türleri tanımlayan derlemeye bir yöntem Init içeren bir sınıf ekleyerek gerçek olabilir:
namespace MyCompany.Controls
{
public static class Controls
{
public static void Init()
{
}
}
}
Yöntemi Init daha sonra özel ad alanı şemasından türleri tüketen derlemeden çağrıl olabilir:
using Xamarin.Forms;
using MyCompany.Controls;
namespace CustomNamespaceSchemaDemo
{
public partial class MainPage : ContentPage
{
public MainPage()
{
Controls.Init();
InitializeComponent();
}
}
}
Uyarı
Böyle bir kod başvurusu dahil edilemez, XAML derleyicisi özel ad alanı şema türlerini içeren derlemeyi bulamaz.
Denetimi kullanmak için, özel ad alanı şema URL'sini belirten ad alanı bildirimiyle birlikte bir CircleButton XAML ad alanı bildirilmesi gerekir:
<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 örnekleri daha sonra ad alanı ContentPage ön eki ile bildirerek 'ye controls eklenebilir.
Özel ad alanı şema türlerini bulmak Xamarin.Forms için, başvurulan derlemelerde örnekler XmlnsDefinitionAttribute için arama eder. XAML dosyasındaki bir öğenin özniteliği, bir dosyasındaki özellik değeriyle eşlese, türün çözümlemesi xmlns için özellik değerini kullanmayı XmlNamespaceXmlnsDefinitionAttributeXamarin.FormsXmlnsDefinitionAttribute.ClrNamespace denemez. Tür çözümlemesi başarısız Xamarin.Forms olursa, eşleşen ek örneklere göre tür çözümlemesi yapmaya XmlnsDefinitionAttribute devam eder.
Sonuç olarak iki CircleButton örnek görüntülenir:

Örneği indirme