Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Platforma özgü özellikler, özel işleyiciler veya efektler uygulamadan yalnızca belirli bir platformda kullanılabilen işlevleri kullanmanıza olanak sağlar.
Platforma özgü bir XAML veya akıcı kod API'sini kullanma işlemi aşağıdaki gibidir:
- Ad alanı için
Xamarin.Forms.PlatformConfigurationbirxmlnsbildirim veyausingyönerge ekleyin. - Platforma özgü işlevselliği içeren ad alanı için bir
xmlnsbildirim veyausingyönerge ekleyin:- iOS'ta bu ad alanıdır
Xamarin.Forms.PlatformConfiguration.iOSSpecific. - Android'de bu ad alanıdır
Xamarin.Forms.PlatformConfiguration.AndroidSpecific. Android AppCompat için bu ad alanıdırXamarin.Forms.PlatformConfiguration.AndroidSpecific.AppCompat. - Evrensel Windows Platformu bu ad alanıdır
Xamarin.Forms.PlatformConfiguration.WindowsSpecific.
- iOS'ta bu ad alanıdır
- XAML'den veya akıcı API ile koddan platforma
On<T>özgü uygulama. değeriT, ad alanından ,AndroidveyaWindowstürleriXamarin.Forms.PlatformConfigurationolabiliriOS.
Not
Kullanılamadığı bir platformda platforma özgü bir kullanım girişiminin hataya neden olmadığını unutmayın. Bunun yerine kod, platforma özgü uygulanmadan yürütülür.
Akıcı kod API'sinde On<T> kullanılan platforma özgü özellikler nesneleri döndürür IPlatformElementConfiguration . Bu, yöntem basamaklı olarak aynı nesne üzerinde birden çok platforma özgü özelliğin çağrılmasını sağlar.
tarafından Xamarin.Formssağlanan platforma özgü özellikler hakkında daha fazla bilgi için bkz . iOS Platforma Özgü Özellikler, Android Platforma Özgü Özellikler ve Windows Platformu Özellikleri.
Platforma özgü özellikler oluşturma
Satıcılar Efektler ile kendi platforma özgü özellikleri oluşturabilir. Efekt, platforma özgü bir işlev aracılığıyla kullanıma sunulan belirli işlevleri sağlar. Sonuç, XAML aracılığıyla ve akıcı bir kod API'si aracılığıyla daha kolay tüketilebilen bir Efekttir.
Platforma özgü bir oluşturma işlemi aşağıdaki gibidir:
- Belirli bir işlevi Efekt olarak uygulayın. Daha fazla bilgi için bkz . Efekt Oluşturma.
- Efekti ortaya çıkaracak platforma özgü bir sınıf oluşturun. Daha fazla bilgi için bkz . Platforma Özgü Sınıf Oluşturma.
- Platforma özgü sınıfında, platforma özgü öğesinin XAML aracılığıyla tüketilmesine izin vermek için ekli bir özellik uygulayın. Daha fazla bilgi için bkz . Ekli Özellik Ekleme.
- Platforma özgü sınıfında, platforma özgü uzantı yöntemlerini uygulayarak akıcı bir kod API'si aracılığıyla tüketilmesine izin verin. Daha fazla bilgi için bkz . Uzantı Yöntemleri Ekleme.
- Efekt uygulamasını, yalnızca platforma özgü efekt ile aynı platformda çağrıldığında uygulanacak şekilde değiştirin. Daha fazla bilgi için bkz . Efekti Oluşturma.
Bir Efekti platforma özgü olarak ortaya çıkarmanın sonucu, Efektin XAML ve akıcı bir kod API'si aracılığıyla daha kolay kullanılabilmesidir.
Not
Satıcıların kullanıcılar tarafından kullanım kolaylığı sağlamak amacıyla kendi platforma özgü özellikleri oluşturmak için bu tekniği kullanması öngörülmektedir. Kullanıcılar kendi platforma özgü özellikleri oluşturmayı seçse de, Efekt oluşturmak ve kullanmaktan daha fazla kod gerektirdiğine dikkat edilmelidir.
Örnek uygulama, bir denetim tarafından görüntülenen metne gölge ekleyen platforma özgü bir Label uygulama gösterirShadow:

Örnek uygulama, anlama kolaylığı için her platformda platforma özgü bir uygulama uygular Shadow . Ancak, platforma özgü her Efekt uygulamasının yanı sıra, Shadow sınıfının uygulanması her platform için büyük ölçüde aynıdır. Bu nedenle, bu kılavuz Shadow sınıfının uygulanmasına ve tek bir platformda ilişkili Efekt'e odaklanır.
Efektler hakkında daha fazla bilgi için bkz . Denetimleri Efektlerle Özelleştirme.
Platforma özgü sınıf oluşturma
Platforma özgü bir public static sınıf olarak oluşturulur:
namespace MyCompany.Forms.PlatformConfiguration.iOS
{
public static Shadow
{
...
}
}
Aşağıdaki bölümlerde platforma özgü ve ilişkili Efektin Shadow uygulanması ele alınacaktır.
Ekli özellik ekleme
XAML aracılığıyla tüketime izin vermek için platforma Shadow özgü bir ekli özellik eklenmelidir:
namespace MyCompany.Forms.PlatformConfiguration.iOS
{
using System.Linq;
using Xamarin.Forms;
using Xamarin.Forms.PlatformConfiguration;
using FormsElement = Xamarin.Forms.Label;
public static class Shadow
{
const string EffectName = "MyCompany.LabelShadowEffect";
public static readonly BindableProperty IsShadowedProperty =
BindableProperty.CreateAttached("IsShadowed",
typeof(bool),
typeof(Shadow),
false,
propertyChanged: OnIsShadowedPropertyChanged);
public static bool GetIsShadowed(BindableObject element)
{
return (bool)element.GetValue(IsShadowedProperty);
}
public static void SetIsShadowed(BindableObject element, bool value)
{
element.SetValue(IsShadowedProperty, value);
}
...
static void OnIsShadowedPropertyChanged(BindableObject element, object oldValue, object newValue)
{
if ((bool)newValue)
{
AttachEffect(element as FormsElement);
}
else
{
DetachEffect(element as FormsElement);
}
}
static void AttachEffect(FormsElement element)
{
IElementController controller = element;
if (controller == null || controller.EffectIsAttached(EffectName))
{
return;
}
element.Effects.Add(Effect.Resolve(EffectName));
}
static void DetachEffect(FormsElement element)
{
IElementController controller = element;
if (controller == null || !controller.EffectIsAttached(EffectName))
{
return;
}
var toRemove = element.Effects.FirstOrDefault(e => e.ResolveId == Effect.Resolve(EffectName).ResolveId);
if (toRemove != null)
{
element.Effects.Remove(toRemove);
}
}
}
}
IsShadowed Ekli özellik, Efekt'i sınıfın MyCompany.LabelShadowEffect eklendiği denetime Shadow eklemek ve öğesinden kaldırmak için kullanılır. Bu ekli özellik, özelliğin OnIsShadowedPropertyChanged değeri değiştiğinde yürütülecek yöntemi kaydeder. Buna karşılık, bu yöntem ekli özelliğin AttachEffect değerine IsShadowed göre efekti eklemek veya kaldırmak için veya DetachEffect yöntemini çağırır. Efekt, denetimin koleksiyonu değiştirilerek denetime eklenir veya denetimden Effects kaldırılır.
Not
Efekt'in çözüm grubu adının ve Efekt uygulamasında belirtilen benzersiz tanımlayıcının birleştirilmesi olan bir değer belirtilerek çözümlendiğini unutmayın. Daha fazla bilgi için bkz . Efekt Oluşturma.
Ekli özellikler hakkında daha fazla bilgi için bkz . Ekli Özellikler.
Uzantı Yöntemleri Ekleme
Akıcı bir kod API'si Shadow aracılığıyla tüketime izin vermek için platforma özgü uzantı yöntemleri eklenmelidir:
namespace MyCompany.Forms.PlatformConfiguration.iOS
{
using System.Linq;
using Xamarin.Forms;
using Xamarin.Forms.PlatformConfiguration;
using FormsElement = Xamarin.Forms.Label;
public static class Shadow
{
...
public static bool IsShadowed(this IPlatformElementConfiguration<iOS, FormsElement> config)
{
return GetIsShadowed(config.Element);
}
public static IPlatformElementConfiguration<iOS, FormsElement> SetIsShadowed(this IPlatformElementConfiguration<iOS, FormsElement> config, bool value)
{
SetIsShadowed(config.Element, value);
return config;
}
...
}
}
IsShadowed ve SetIsShadowed uzantısı yöntemleri, ekli özellik için IsShadowed sırasıyla get ve set erişimcilerini çağırır. Her uzantı yöntemi, platforma IPlatformElementConfiguration<iOS, FormsElement> özgü olanın iOS'tan örnekler üzerinde çağrılabileceğini belirten türü üzerinde Label çalışır.
Efekti oluşturma
Platforma Shadow özgü bir öğesine Labelöğesini ekler MyCompany.LabelShadowEffect ve kaldırır. Aşağıdaki kod örneği, iOS projesinin uygulamasını gösterir LabelShadowEffect :
[assembly: ResolutionGroupName("MyCompany")]
[assembly: ExportEffect(typeof(LabelShadowEffect), "LabelShadowEffect")]
namespace ShadowPlatformSpecific.iOS
{
public class LabelShadowEffect : PlatformEffect
{
protected override void OnAttached()
{
UpdateShadow();
}
protected override void OnDetached()
{
}
protected override void OnElementPropertyChanged(PropertyChangedEventArgs args)
{
base.OnElementPropertyChanged(args);
if (args.PropertyName == Shadow.IsShadowedProperty.PropertyName)
{
UpdateShadow();
}
}
void UpdateShadow()
{
try
{
if (((Label)Element).OnThisPlatform().IsShadowed())
{
Control.Layer.CornerRadius = 5;
Control.Layer.ShadowColor = UIColor.Black.CGColor;
Control.Layer.ShadowOffset = new CGSize(5, 5);
Control.Layer.ShadowOpacity = 1.0f;
}
else if (!((Label)Element).OnThisPlatform().IsShadowed())
{
Control.Layer.ShadowOpacity = 0;
}
}
catch (Exception ex)
{
Console.WriteLine("Cannot set property on attached control. Error: ", ex.Message);
}
}
}
}
UpdateShadow yöntemi, ekli özelliğin IsShadowed olarak ayarlanması trueve platforma özgü özelliğin Shadow Efekt'in uygulandığı platformda çağrılmış olması koşuluyla, gölgeyi oluşturmak için özellikleri ayarlarControl.Layer. Bu denetim yöntemiyle OnThisPlatform gerçekleştirilir.
Shadow.IsShadowed Ekli özellik değeri çalışma zamanında değişirse, Efektin gölgeyi kaldırarak yanıt vermesi gerekir. Bu nedenle, yöntemini çağırarak bağlanabilir özellik değişikliğine yanıt vermek için yönteminin UpdateShadow geçersiz kılınmış bir sürümü OnElementPropertyChanged kullanılır.
Efekt oluşturma hakkında daha fazla bilgi için bkz . Efekt Oluşturma ve Efekt Parametrelerini Ekli Özellikler Olarak Geçirme.
Platforma özgü kullanma
Platforma Shadow özgü XAML'de ekli özellik bir boolean değere ayarlanarak Shadow.IsShadowed kullanılır:
<ContentPage xmlns:ios="clr-namespace:MyCompany.Forms.PlatformConfiguration.iOS" ...>
...
<Label Text="Label Shadow Effect" ios:Shadow.IsShadowed="true" ... />
...
</ContentPage>
Alternatif olarak, akıcı API kullanılarak C# dilinden de kullanılabilir:
using Xamarin.Forms.PlatformConfiguration;
using MyCompany.Forms.PlatformConfiguration.iOS;
...
shadowLabel.On<iOS>().SetIsShadowed(true);