آموزش Attached Properties در زامارین فرم

آموزش Attached Properties در زامارین فرم

آموزش Attached Properties در زامارین فرم

Attached properties یک object را قادر می سازد تا یک مقدار برای یک property تخصیص دهد در صورتی که این object متعلق به کلاس خودش نباشد .

برای مثال ، در xaml  عناصر فرزند می توانند از Attached properties برای ارتباط با عنصر والد خود استفده کنند به عنوان نمونه کنترل grid  برای ساخت سطر و ستونها به کار می رود . در این کنترل دو خصوصیت grid.row و grid.colum برای تعریف سطر و ستونها به کار می رود .این دو خصوصیت مبتنی بر attached properties طراحی شده زیرا  آن‌ها بر روی عناصری هستند که فرزندان یک grid هستند، نه خود grid.

Attached properties را می توان برای  سناریوهای زیر اجرا شود 

  1. وقتی که property نیاز داشته باشید که قابل دسترسی برای کلاس های دیگر باشد
  2. زمانی که property باید با کلاس های دیگر اذغام شود

ایجاد attached property

فرایند ایجاد یک attached property به شرح زیر است 

  1. ایجاد یک نمونه از BindableProperty  همراه متد CreateAttached
  2. ایجاد یک accessors  با تعریف  static GetPropertyName و  static SetPropertyName

ایجاد property

هنگام ایجاد attached property لازم نیست property  از BindableObject مشتق شود ولی accessors proerty  باید از BindableObject مشتق شده باشد 

قرارداد نامگذاری برای attached property به این صورت است که بعد نام BindableProperty کلمه property  قرار می گیرد

در مثال زیر نحوه تعریف attached property را مشاهده می کنید

public static readonly BindableProperty HasShadowProperty =
  BindableProperty.CreateAttached ("HasShadow", typeof(bool), typeof(ShadowEffect), false);

در کد بالا باعث ایجاد یک attached property به نام HasShadowProperty، از نوع bool می‌شود. این ویژگی متعلق به کلاس ShadowEffect است و دارای مقدار پیش‌فرض false است.برای اطلاعات بیشتر در مورد ایجاد ویژگی‌های bindable، از جمله پارامترهایی که می‌توانند در طول ایجاد، مشخص شوند، به این پست مراجعه کنید.

ایجاد accessors

برای تعریف accessors نیازمند دو متد زیر است که باید در هنگام ایجاد attached property تعریف شوند در غیر این صورت property  قابل دسترس نیست 

public static valueType GetPropertyName(BindableObject target)
public static void SetPropertyName(BindableObject target, valueType value)

در نهایت تعریف کلی attached property به صورت زیر است 

public static readonly BindableProperty HasShadowProperty =
  BindableProperty.CreateAttached ("HasShadow", typeof(bool), typeof(ShadowEffect), false);
  
public static bool GetHasShadow (BindableObject view)
{
  return (bool)view.GetValue (HasShadowProperty);
}

public static void SetHasShadow (BindableObject view, bool value)
{
  view.SetValue (HasShadowProperty, value);
}

نحوه استفاده attached property

در xaml 

<ContentPage ... xmlns:local="clr-namespace:EffectsDemo" ...>
  <Label Text="Label Shadow Effect" local:ShadowEffect.HasShadow="true" />
</ContentPage>

در کد 

var label = new Label { Text = "Label Shadow Effect" };
ShadowEffect.SetHasShadow (label, true);

در استایل

<Style x:Key="ShadowEffectStyle" TargetType="Label">
  <Style.Setters>
    <Setter Property="local:ShadowEffect.HasShadow" Value="true" />
  </Style.Setters>
</Style>
<Label Text="Label Shadow Effect" Style="{StaticResource ShadowEffectStyle}" />

سناریو های پیشرفته

برای سناریو های پیشرفته به این پست مراجعه کنید 

دانلود نمونه کد و مثال

افزودن نظر جدید

در صورتی که وارد نشده باشید نظر شما بعد از تایید ادمین منتشر خواهد شد

نظرات بدون نمایش ایمیل و شماره تماس منتشر خواهد شد

وارد کردن فیلد های ستاره دار ( * ) الزامی است

 
 
 
 
 

 

0 نظر ثبت شده است