ملحقات تمييز XAML
- 10 دقائق
سيتم تسوية الكثير من تعريف XAML الخاص بك في وقت التحويل البرمجي. غالبا ما تعرف أين يجب وضع العناصر، والألوان والخطوط التي سيتم استخدامها، والقيم الحرفية التي يجب تعيينها للخصائص.
ومع ذلك، في بعض الأحيان تحتاج إلى تعيين قيمة خاصية إلى قيمة لا يمكن تحديدها في وقت التحويل البرمجي. هذه القيم معروفة فقط عند تشغيل البرنامج. في هذه الحالات، يمكنك إنشاء كائن يوفر قيمة ل XAML في وقت التشغيل. يدعم XAML ملحقات العلامات لهذا الغرض.
في هذه الوحدة، ستتعلم كيفية إنشاء ملحقات العلامات واستخدامها.
ما هو ملحق العلامات؟
ملحق العلامات هو فئة تستخدمها في XAML للوصول إلى قيم وقت التشغيل. لنفترض أن لديك العديد من التسميات المعرفة في واجهة مستخدم XAML، وتريد تعيين FontSize الخاصية إلى نفس القيمة في جميع أنحاء التطبيق للتأكد من أن كل تصميم التسميات متناسق. يمكنك تعيين الخاصية FontSize باستخدام XAML كما هو موضح في المثال التالي:
<Label Text="Hello, World!"
Grid.Row="0"
SemanticProperties.HeadingLevel="Level1"
FontSize="28"
HorizontalOptions="CenterAndExpand"/>
يمكنك تكرار هذا الإعداد نفسه لكل تسمية، ولكن ماذا لو كنت تريد تغيير هذه القيمة لاحقا؟ تحتاج إلى العثور على كل مثيل من هذه الخاصية وإجراء التغيير. افترض أيضا أنك لا تعرف القيمة التي يجب استخدامها؛ يمكن حسابه في وقت التشغيل استنادا إلى عوامل مثل اتجاه الجهاز أو دقة الشاشة أو اعتبارات أخرى. في هذه الحالات، تحتاج إلى شيء أكثر تعقيدا من القيمة الحرفية ذات التعليمات البرمجية المضمنة. هذا هو المكان الذي يكون فيه ملحق العلامات مفيدا. ملحقات التمييز تمنحك مرونة في كيفية الحصول على القيمة التي يتم استخدامها في XAML.
إنشاء ملحق علامات
ملحق العلامات هو فئة تنفذ واجهة Microsoft.Maui.Controls.Xaml.IMarkupExtension . تعرف هذه الواجهة أسلوبا واحدا، يسمى ProvideValue، بالتوقيع التالي:
public object ProvideValue(IServiceProvider serviceProvider)
{
...
}
الغرض من هذا الأسلوب هو توفير قيمة لعلامات XAML. لاحظ أن نوع الإرجاع هو object، لذلك يمكن أن تكون القيمة من أي نوع طالما أنها مناسبة للمكان الذي يتم استخدامه فيه. على سبيل المثال، في ملحق العلامات الذي يقوم بحساب حجم خط وإرجاعه، يجب أن يكون doubleنوع الإرجاع .
serviceProvider تحتوي المعلمة على معلومات سياقية حول مكان استخدام ملحق العلامات في التعليمات البرمجية XAML؛ ومن بين أجزاء أخرى من المعلومات، تحدد عنصر التحكم الذي يتم تطبيق الملحق عليه.
يمكنك إبقاء ملحق العلامات للخاصية بسيطا FontSize . في المثال التالي، MainPage تعرض الفئة حقلا double باسم MyFontSize.
GlobalFontSizeExtension تقوم الفئة بتنفيذ الواجهةIMarkupExtension، ويرجع ProvideValue الأسلوب قيمة MyFontSize المتغير:
namespace MyMauiApp;
public partial class MainPage : ContentPage
{
public const double MyFontSize = 28;
public MainPage()
{
InitializeComponent();
...
}
...
}
public class GlobalFontSizeExtension : IMarkupExtension
{
public object ProvideValue(IServiceProvider serviceProvider)
{
return MainPage.MyFontSize;
}
}
إشعار
MyFontSize يجب أن يكون الحقل عضوا static في MainPage الفئة للسماح بالإشارة إليه في ProvideValue الأسلوب بهذه الطريقة. الممارسة الجيدة تعني أنه في هذه الحالة، يجب أن يكون المتغير ثابتا أيضا.
const القيمة هي static.
ProvideValue يمكن للأسلوب أيضا إجراء تعديلات على القيمة التي تم إرجاعها، اعتمادا على الاتجاه وعامل نموذج الجهاز.
تطبيق ملحق العلامات على عنصر تحكم في XAML
لاستخدام ملحق العلامات في التعليمات البرمجية XAML، أضف مساحة الاسم التي GlobalFontSizeExtension تحتوي على الفئة إلى قائمة مساحات الأسماء في العلامة ContentPage . في المثال التالي، يتم إعطاء مساحة الاسم هذه الاسم المستعار mycode:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:mycode="clr-namespace:MyMauiApp"
x:Class="MyMauiApp.MainPage">
يمكنك استخدام ملحق العلامات لتعيين الخاصية FontSize مثل هذا. لاحظ أن الاصطلاح هو أن ملحق العلامات يحتوي على ملحق اللاحقة باسمه. يتعرف XAML على هذه اللاحقة، ولا تحتاج إلى تضمينها عند استدعاء الملحق من التعليمة البرمجية XAML. في المثال التالي، GlobalFontSizeExtension تتم الإشارة إلى الفئة ببساطة على أنها GlobalFontSize:
<Label Text="Hello, World!"
Grid.Row="0"
SemanticProperties.HeadingLevel="Level1"
FontSize="{mycode:GlobalFontSize}"
HorizontalOptions="CenterAndExpand"/>
يمكنك تطبيق ملحق العلامات نفسه في التعليمات البرمجية XAML لأي عنصر تحكم يحتاج إلى تحديد حجم الخط. في وقت لاحق، إذا قررت تغيير حجم الخط، فستحتاج فقط إلى تعديل تعريف MyFontSize المتغير في MainPage الفئة .
فئة StaticExtension
بقدر GlobalFontSize ما يكون ملحق العلامات مفيدا، فمن غير المحتمل أن تقوم بإنشاء مثل هذا الملحق. والسبب في ذلك بسيط؛ يوفر .NET MAUI بالفعل ملحقا أكثر عمومية يسمح لك بالإشارة إلى أي قيمة ثابتة في التعليمات البرمجية الخاصة بك. يسمى StaticExtensionهذا الملحق ، أو Static باختصار. تظهر التعليمات البرمجية التالية المخطط التفصيلي الأساسي لفئة الملحق هذه:
[ContentProperty ("Member")]
public class StaticExtension : IMarkupExtension
{
public string Member {get; set;}
public object ProvideValue (IServiceProvider serviceProvider)
{
...
}
}
إشعار
الغرض من ملحقات العلامات المخصصة هو السماح لك بمعالجة المواقف الأكثر تعقيدا بدلا من الحالة الثابتة البسيطة. على سبيل المثال، قد تحتاج إلى تغيير حجم الخط ديناميكيا استنادا إلى عامل نموذج الجهاز.
لاستخدام هذه الفئة في التعليمات البرمجية XAML، قم بتوفير اسم المتغير الثابت الذي تريد الرجوع إليه في Member الخاصية ، ويرجع ProvideValue الأسلوب القيمة في هذا المتغير. يوضح المثال التالي كيفية استخدامه:
<Label Text="Hello, World!"
Grid.Row="0"
SemanticProperties.HeadingLevel="Level1"
FontSize="{x:Static Member=mycode:MainPage.MyFontSize}"
HorizontalOptions="CenterAndExpand"/>
يوفر .NET MAUI مجموعة من فئات ملحق العلامات الأخرى، والتي يمكنك استخدامها لسيناريوهات مثل ربط البيانات، والإشارة إلى الموارد والأنماط الديناميكية، ومعالجة صفائف البيانات.
التحقق من المعرفة
الملاحظات
هل كانت هذه الصفحة مفيدة؟
لا
هل تحتاج إلى مساعدة مع هذا الموضوع؟
هل تريد محاولة استخدام Ask Learn لتوضيح هذا الموضوع أو إرشادك خلاله؟