آموزش Attached Properties در زامارین فرم
Attached properties یک object را قادر می سازد تا یک مقدار برای یک property تخصیص دهد در صورتی که این object متعلق به کلاس خودش نباشد .
برای مثال ، در xaml عناصر فرزند می توانند از Attached properties برای ارتباط با عنصر والد خود استفده کنند به عنوان نمونه کنترل grid
برای ساخت سطر و ستونها به کار می رود . در این کنترل دو خصوصیت grid.row
و grid.colum
برای تعریف سطر و ستونها به کار می رود .این دو خصوصیت مبتنی بر attached properties طراحی شده زیرا آنها بر روی عناصری هستند که فرزندان یک grid
هستند، نه خود grid
.
Attached properties را می توان برای سناریوهای زیر اجرا شود
- وقتی که property نیاز داشته باشید که قابل دسترسی برای کلاس های دیگر باشد
- زمانی که property باید با کلاس های دیگر اذغام شود
ایجاد attached property
فرایند ایجاد یک attached property به شرح زیر است
- ایجاد یک نمونه از BindableProperty همراه متد
CreateAttached
- ایجاد یک 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 نظر ثبت شده است