نظرة عامة على XAML (WPF)

هذا المقال يوضح ميزات لغة XAML كما يوضح كيفية استخدام XAML لكتابة تطبيقات Windows Presentation Foundation (WPF) . هذا المقال يشرح XAML بشكل خاص كما يتم تنفيذه بواسطة WPF. XAML نفسه هو مفهوم لغة أكبر من WPF.

يشتمل هذا الموضوع على الأقسام التالية.

  • ما هو XAML؟
  • بناء جملة XAML باختصار
  • حالة الأحرف و المساحات الفارغة في XAML
  • ملحقات العلامات
  • محولات الأنواع
  • عناصر جذر XAML و مساحات أسماء XAML
  • بادئات مخصصة وأنوع محصصة في XAML
  • أحداث و التعليمات البرمجية الخلفية لـ XAML
  • XAML العناصر المسماة
  • الخصائص المرفقة و الأحداث المرفقة
  • أنواع الأساس و XAML
  • أمن XAML
  • تحميل XAML من التعليمات البرمجية
  • وماذا بعد
  • موضوعات ذات صلة

ما هو XAML؟

XAML هو لغة العلامات التعريفية. أثناء تطبيق إلى NET Framewor.البرمجة الطراز، XAML تبسيط إنشاء واجهة المستخدم NET Framewor.تطبيق. يمكنك إنشاء عناصر واجهة المستخدم مرئية في علامات XAML التعريفية ثم فصل تعريف واجهة المستخدم من منطق وقت التشغيل باستخدام التعليمات البرمجية - خلف الملفات، منضمة إلى العلامات خلال تعريفات الفئة الجزئية. يمثل XAML مباشرة خاصة بإنشاء الكائنات في التعيين محددة من النسخ للأنواع التي تم تعريفها في تجميعات. Th هو هو عكس أغلب اللغات ترميز الأخرى، التي تكون عادة إحدى لغات interpreted بدون مثل رابط مباشر إلى النظام نوع نسخ. يقوم XAML بتمكين سير عمل حيث يمكن للجهات المنفصلة العمل على واجهة المستخدم و منطق التطبيق باستخدام أدوات مختلفة بشكل نسبي.

عندما يتم تمثيله كنص ، ملفات XAML هي ملفات XML التي لها بشكل عام ملحق .xaml. يمكن أن يتم ترميز الملفات بأي XML ترميز، ولكن ترميز ك UTF-8 هو النموذجي.

يظهر المثال التالي كيف يمكنك إنشاء زر كجزء من واجهة المستخدم. يهدف هذا المثال فقط لإعطاءك فكرة عن كيفية تمثيل XAML لــmetaphors البرمجة واجهة المستخدم الشائعة (ليس نموذج كامل).

<StackPanel>
  <Button Content="Click Me"/>
</StackPanel>

بناء جملة XAML باختصار

المقاطع التالية تشرح النماذج الأساسية من بناء جملة XAML كما تقوم بإعطاء مثال علامات قصير. لا يقصد من هذه المقاطع إلى توفير معلومات كاملة حول كل نموذج بناء الجملة، مثل كيف يتم تمثيل هذه في النظام نوع النسخ. لمزيد من المعلومات حول مواصفات عن بناء جملة XAML لكل من نماذج بناء الجملة في هذا الموضوع ، راجع بناء جملة XAML بالتفاصيل.

الكثير من المواد في المقاطع التالية قليلة ستكون أولية إلى لك، إذا كان لديك إمكانية السابقة باستخدام لغة XML. Th هو هو واقتران واحد مبادئ التصميم الأساسي ل XAML. XAML XAML اللغة تعريف المفاهيم خاصة بها، ولكن هذه العمل المفاهيم خلال XML اللغة ونموذج ترميز.

عناصر كائنات XAML

عنصر كائن بشكل عام بالتصريح مثيل من نوع. هذا النوع هو المعرفة في تجميعات التي توفر أنواع النسخ لتقنية يستخدم لغة XAML.

بناء جملة عنصر الكائن يبدأ دائماً بقوس بزاوية مفتوحة (<). Th هو هو متبوعاً باسم النوع الذي تريد إنشاء مثيل. (الاسم أن ربما يتضمن بادئة ومفهوم الذي سوف يتم شرحها لاحقاً.) بعد ذلك، يمكنك بشكل اختياري تعريف السمات على عنصر الكائن . لإكمال علامة عنصر الكائن ، قم بالإنهاء بقوس زاوية الإغلاق ( > ). بدلاً من ذلك يمكنك استخدام نموذج self-closing الذي ليس لديه أي محتوى، بإكمال علامة خط مائل أمامي و إغلاق قوس الزاوية على التوالي (/>). على سبيل المثال، انظر إلى تكرر العلامات التي تم اظهارها سابقاً مرة أخرى:

<StackPanel>
  <Button Content="Click Me"/>
</StackPanel>

يحدد هذا اثنين من عنصر الكائن : <StackPanel> (مع محتوى و علامة إغلاق لاحقاً) ، و<Button .../>(نموذج الاغلاق الذاتي، مع العديد من السمات). عناصر كائن StackPanel و Button كل منهما يخطط اسم الفئة التي تم تعريفها بواسطة WPF و جزءًا من تجميعات WPF . عند تحديدك علامة عنصر كائن ، تقوم بإنشاء إرشادات لمعالجة XAML لإنشاء مثيل جديد. كل مثيل هو تم إنشاؤه بواسطة استدعاء الدالة الإنشائية افتراضي من النوع الأساسي عند تحليل وتحميل XAML.

بناء جملة السمة (خصائص)

يمكن التعبير عن خصائص كائن غالباً كسمات لعنصر الكائن . بناء جملة السمة يقوم بتسمية الخاصية التي تعيينها في بناء جملة السمة متبوعاً بعامل التعيين (=). قيمة السمة يتم دوماً تحديدها كسلسلة موجودة ضمن علامات الأقواس.

بناء جملة السمة هو أكثر بناء جملة لإعداد الخاصية انسيابية ويكون هة بناء الجملة الأكثر بديهية ليتم استخدامه للمطورين الذين قاموا باستخدام لغات العلامات في الماضي. على سبيل المثال، العلامة التالية إنشاء زر ذلك h كـ الأحمر للنص والخلفية زرقاء بالإضافة إلى عرض النص المحدد كـ Content.

<Button Background="Blue" Foreground="Red" Content="This is a button"/>

بناء جملة عنصر الخاصية

لبعض خصائص عنصر الكائن، والسمة بناء جملة هو غير ممكنة، لأن الكائن أو المعلومات الضرورية لتوفير القيمة خاصية لا يمكن التعبير نحو جيد عنها داخل علامة اقتباس وقيود سلسلة من بناء جملة السمة. بالنسبة لهذه الحالات، بناء الجملة المختلف المُعرف ببناء جملة عنصر الخاصية يمكن استخدامه .

بناء الجملة للخاصية عنصر هو علامة بداية propertyName <typeName.>. محتويات هذه علامة بشكل عام، هو عنصر كائن من النوع الذي يأخذ خاصية كالقيمة الخاصة به. بعد تحديد المحتوى، يجب إغلاق العنصر خاصية إنهاء علامة. يكون بناء الجملة لعلامة النهاية propertyName </typeName.>.

إذا كان بناء جملة السمة ممكناً ، استخدام بناء جملة السمة عادةً يكون أكثر ملاءمة و يقوم بتمكين علامات مضغوطة أكثر ولكن هذه غالباً تكون مسألة نمط ليس قيد تقني . يظهر المثال التالي نفس الخصائص التي تم تعيينها كما في مثال بناء جملة السمة السابق لكن هذه المرة باستخدام بناء جملة عنصر الخاصية لكافة خصائص Button.

<Button>
  <Button.Background>
    <SolidColorBrush Color="Blue"/>
  </Button.Background>
  <Button.Foreground>
    <SolidColorBrush Color="Red"/>
  </Button.Foreground>
  <Button.Content>
    This is a button
  </Button.Content>
</Button>

بناء جملة المجموعة

لغة XAML يتضمن بعض تحسينات إنتاج ترميز يمكن أكثر البشرية قراءته. واحد تحسين هو أنه إذا خاصية معينة نوع مجموعة، ثم عناصر التي تقوم بتعريفه في ترميز كعناصر تابعة ضمن القيمة تلك الخاصية جزءا من المجموعة. في ترتيب هو الحالة عن التعيين من العناصر الكائن التابع هو القيمة التي يتم تعيين إلى خاصية "الالتعيين".

يظهر المثال التالي بناء جملة المجموعة لتعيين قيم خاصية GradientStops :

<LinearGradientBrush>
  <LinearGradientBrush.GradientStops>
    <!-- no explicit new GradientStopCollection, parser knows how to find or create -->
    <GradientStop Offset="0.0" Color="Red" />
    <GradientStop Offset="1.0" Color="Blue" />
  </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

خصائص المحتوى XAML

XAML يقوم بتعيين ميزة لغة فيه فئة تقوم بتعيين بالظبط خاصية واحدة من خصائصه كي يكون خاصية محتوى XAML . يتم استخدام العناصر التابعة لعنصر الكائن لتعيين قيمة خاصية المحتوى تلك. بمعنى آخر، للخاصية المحتوى بشكل فريد، يمكنك حذف عنصر خاصية عند تعيين هذه الخاصية في ترميز XAML و إنتاج metaphor اصل/فرع أكثر وضوحاً في العلامة.

على سبيل المثال، Border يقوم بتحديد خاصية محتوى لــ Child. عنصري Border التاليين يتم معاملتهما بالمثل. الأولى للاستفادة من بناء جملة خاصية المحتوى كما تحذف عنصر خاصية Border.Child . يُظهر الثاني Border.Child بشكل صريح.

<Border>
  <TextBox Width="300"/>
</Border>
<!--explicit equivalent-->
<Border>
  <Border.Child>
    <TextBox Width="300"/>
  </Border.Child>
</Border>

كـ قاعدة للغة XAML، القيمة خاصية XAML المحتوى يجب أن يكون منح تماما قبل أو في شكل كامل بعد أية عناصر غير ذلك للخاصية تشغيل هذا العنصر الكائن. على سبيل المثال،العلامات التالية لا تقوم بترجمة:

<Button>I am a 
  <Button.Background>Blue</Button.Background>
  blue button</Button>

لمزيد من المعلومات حول هذا التقييد على خصائص محتوى XAML ، راجع مقطع " خصائص محتوى XAML " من بناء جملة XAML بالتفاصيل.

محتوى النص

عدد صغير من العناصر XAML يمكنها معالجة عملية النص مباشرة كالمحتوى الخاص بها. إلى تمكين ذلك، يجب أن يكون واحد الحالات التالية صحيحة:

  • يجب أن تقوم الفئة بتعريف خاصية المحتوى ، و خاصية المحتوى تلك يجب أن تكون من النوع القابل للتعيين إلى سلسلة (قد يكون النوع Object). على سبيل المثال، أي ContentControl تستخدم Content كـخاصية المحتوى الخاصة به وهو نوع Object ، ويدعم هذا الاستخدام التالي على ContentControl العملي مثل Button: <Button>Hello</Button>.

  • هذا النوع يجب أن يقوم بتعريف محول نوع حيث يتم استخدام محتوى النص كنص التهيئة لمحول النص ذلك. على سبيل المثال، <Brush>Blue</Brush>. هذه الحالة أقل شيوعاً في التدريب العملي.

  • نوع يجب أن تكون لغة XAML معروفة الأولية.

حصائص المحتوى و بناء جملة المجموعة المدمج

خذ بعين الاعتبار هذا المثال:

<StackPanel>
  <Button>First Button</Button>
  <Button>Second Button</Button>
</StackPanel>

هنا, كل Button هو عنصر تابع لــ StackPanel. هذه هي العلامات السلسة والبديهية التي تحذف اثنين من العلامات لسببين مختلفين .

  • عنصر الخاصية StackPanel.Children المحذوف: StackPanelمشتقة منPanel. PanelيعرفPanel.Childrenكـ به XAML المحتوى خاصية.

  • عنصر كائن UIElementCollection المحذوف : الخاصية Panel.Children تأخذ النوع UIElementCollection ، الذي يقوم بتطبيق IList. علامة عنصر المجموعة يمكن أن يتم حذفه استناداً إلى قواعد XAML لمعالجة المجموعات مثل IList. (في هذه الحالة، UIElementCollection فعلياً لا يستطيع أن يقوم بإنشاء مثيل لأنه لا يقوم بالكشف عن منشئ افتراضي الذي هو السبب في ظهور عنصر كائن UIElementCollection بالتعليقات إلى الخارج).

<StackPanel>
  <StackPanel.Children>
    <!--<UIElementCollection>-->
    <Button>First Button</Button>
    <Button>Second Button</Button>
    <!--</UIElementCollection>-->
  </StackPanel.Children>
</StackPanel>

سمة بناء الجملة (الأحداث)

بناء جملة السمة يمكن أيضاً استخدامها للأعضاء التي هي أحداث بدلاً من الخصائص. في هذا حالة، اسم السمة هو اسم حدث. في تطبيق WPF الأحداث ل XAML، الالقيمة سمة's هو اسم المعالج الذي يطبق المفوض بذلك حدث. على سبيل المثال، يعيّن العلامات التالية معالج لحدث Click إلى Button تم إنشاؤه في العلامات:

<Page 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>

هناك المزيد من أحداث XAML في WPF أكثر من هذا المثال لبناء جملة السمة فقط. على سبيل المثال، قد تتساءل عن ClickHandlerالمشار إليها هنا يمثل وكيف أنها هو المعرفة. هذا سوف يتم شرحه في مقطع Events and XAML Code-Behind لهذا المقال.

حالة الأحرف و المساحات الفارغة في XAML

XAML هو بوجه عام حالة الأحرف. لأغراض تحليل أنواع النسخ، XAML WPF هو حساسة لحالة الأحرف بنفس قواعد CLR هو حساسة لحالة الأحرف. عناصر الكائن خاصية العناصر وأسماء السمات يجب كل تحديد باستخدام حالة الأحرف حساسة عند مقارنة بالاسم إلى النوع الأساسي في تجميع، أو إلى عضو نوعا. الكلمات الأساسية للغة XAML والاوليات أيضا تحسس حالة الأحرف. قيم غير دوماً حساسة لحالة الأحرف. تعتمد حساسسة حالة الأحرف للقيم على سلوك محول نوع المقترن بالخاصية التي تأخذ القيمة أو نوع قيمة الخاصية. على سبيل المثال، للخصائص التي تأخذ Booleanيأخذ أي نوع trueأو Trueكـ القيم مكافئة، ولكن فقط لأن اكتب محلل XAML WPF الأصلي بتحويل سلسلة إلى Booleanمسبقاً تسمح هذه كـ المناظرة.

معالجات XAML WPF و serializers سيتم تجاهل أو إسقاط الجميع nonsignificant مسافة بيضاء، و يقلل التكرار أي مسافة بيضاء كبيرة. Th هو هو consهوtent بالتوصيات سلوك الافتراضي مسافة بيضاء لمواصفات XAML. يعتبر هذا السلوك بشكل عام نتيجة عندما تقوم بتحديد سلاسل داخل خصائص محتوىXAML. بمصطلح أبسط ، يقوم XAML بتحويل مساحة ، تغذية الأسطر و أحرف التبويب إلى مسافات ومن ثم يحفظ المسافة الواحدة إذا تم العثور عليها في نهاية السلسلة المتجاورة. الشرح الكامل لمعالجة المسافة البيضاء الخاصة بــ XAML لم يتم تغطيتها في هذا الموضوع . للمزيد من التفاصيل ، راجع مسافة فاصلة المعالجة في XAML.

ملحقات العلامات

ملحقات العلامات هي مفهوم لغة XAML. عند استخدامه لتوفير القيمة جملة سمة المتعرجة ( {و }) تشير إلى ترميز استخدام الملحق. يوجه هذا الاستخدام معالجة XAML للهروب من المعاملة العامة لقيم السمة كسلسلة حرفية أو قيمة سلسلة قابلة للتحويل.

ملحقات العلامات الأكثر شيوعًا المستخدمة في برمجة التطبيق WPF هي الربط ، المستخدم لتعبيرات ربط البيانات ، و مراجع المورد StaticResource DynamicResource. باستخدام ملحقات العلامات ، يمكنك استخدام بناء جملة السمة لتوفير قيم للخصائص إذا كانت الخاصية لا تعتمد بناء جملة السمة بشكل عام. ملحقات العلامات غالباً تقوم باستخدام أنواع التعبير المتوسط لتمكين ميزات مثل جعل القيم مختلفة أو الرجوع إلى كائنات أخرى موجودة فقط في وقت التشغيل.

على سبيل المثال، يعين العلامات التالية قيمة خاصية Style باستخدام بناء جملة السمة . تأخذ خاصية Style مثيل فئة Style التي بشكل افتراضي لا تتمكن من إنشاء مثيل بواسطة سلسلة بناء جملة السمة . ولكن في هذه الحالة، تشير السمة إلى ملحق علامات معين ، StaticResource . عند معالجة ملحق العلامات, تقوم بإرجاع مرجع إلى نمط الذي تم مسبقاً إنشاء مثيل له كمورد keyed في قاموس المورد.

<Page.Resources>
  <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
  <Style TargetType="Border" x:Key="PageBackground">
    <Setter Property="Background" Value="Blue"/>
  </Style>


...


</Page.Resources>
<StackPanel>
  <Border Style="{StaticResource PageBackground}">


...


  </Border>
</StackPanel>

سرد الجميع ملحقات ترميز لتطبيق XAML خصيصا في WPF، راجع لمرجع ملحقات XAML WPF. لإدخال مرجع قائمة ملحقات أسماء ترميز التي يتم تعريفها بواسطة النظام.Xaml و المزيد نطاق واسع متوفرة لتطبيقات.NET XAML، راجع مساحة الاسم XAML (x:) ميزات اللغة. للحصول على مزيد من المعلومات حول مفاهيم ملحقات العلامات ، راجع ملحقات ترميز و XAML WPF.

محولات الأنواع

في المقطع بناء جملة السمة ، تم ذكر أن قيمة السمة لابد أن تكون قادرة على أن يتم تعيينها بواسطة سلسلة. المعالجة الأساسية ، الأصلية لكيفية تحويل السلاسل إلى كائن آخر أو قيم أولية تستند إلى نوع String نفسه، بالإضافة إلى المعالجة الأصلية لبعض الأنواع المعينة مثل DateTime أو Uri. لكن العديد من أنواع WPF صواب أو أعضاء من تلك الأنواع تقوم بتوسيع سلوك معالجة سمة السلسلة الأساسية بهذه الطريقة التي بها يمكن تحديد مثيلات لأنواع الكائن الأكثر تعقيداً كسلاسل و سمات.

Thicknessبنية هو مثال من النوع الذي يحتوي على نوع تحويل ممكنة للاستخدامات XAML. Thicknessيشير إلى قياسات داخل مستطيل متداخلة و هو المستخدمة كالقيمة للخصائص مثلMargin. عن طريق وضع محول نوع على Thickness ، كافة الخصائص التي تستخدم Thickness أسهل للتحديد في XAML لأنه يمكن تعيينها كسمات. يستخدم المثال التالي تحويل نوع و بناء جملة السمة لتوفير قيمة من أجل Margin:

<Button Margin="10,20,10,30" Content="Click me"/>

مثال بناء جملة السمة السابق يكافيء مثال بناء الجملة المطوّل أكثر التالي حيث يتم تعيين Margin بدلاً من ذلك من خلال بناء جملة عنصر خاصية تحتوي عنصر كائن Thickness . يتم تعيين الأربعة خصائص للمفاتيح الخاصين بـ Thickness كسمات على مثيل جديد:

<Button Content="Click me">
  <Button.Margin>
    <Thickness Left="10" Top="20" Right="10" Bottom="30"/>
  </Button.Margin>
</Button>
ملاحظةملاحظة

وهناك أيضا عدد محدد من الكائنات حيث تحويل نوع هو العامة فقط طريقة لتعيين خاصية لهذا النوع دون تشتمل فئة فرعية، لأنه ليس لدى نفسها النوع الدالة الإنشائية افتراضي.المثال هو Cursor.

للحصول على مزيد من المعلومات حول كيفية دعم تحويل النوع واستخدامه لبناء جملة السمة , راجع TypeConverters و XAML.

عناصر جذر XAML و مساحات أسماء XAML

يجب أن يحتوي ملف XAML على جذر واحد فقط ، لكي يكون كلا من ملفين XML المنشأين جيداً وملف XAML صالح . سيناريوهات WPF نموذجي، يمكنك استخدام العنصر الجذر يحتوي معنى بروزا في الطراز تطبيقات WPF (على سبيل المثال، Windowأو Pageلأية صفحة، ResourceDictionaryلقاموس خارجية، أو Applicationلتعريف تطبيق). يظهر المثال التالي عنصر الجذر لملف XAML نموذجي الخاص بصفحة WPF ، بعنصر الجذر الخاص بــ Page.

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"


...


</Page>

عنصر الجذر أيضاً يحتوي على سمات xmlns و xmlns:x. هذه السمات تقوم بالاشارة إلى معالج XAML حيث مساحات أسماء XAML تحتوي على تعريفات نوع للأنواع المرجعة التي ستشير إليها العلامات كعناصر. سمة xmlns بشكل خاص تشير إلى مساحة اسم XAML الافتراضي . داخل مساحة اسم XAML الافتراضي ، يمكن تحديد عناصر الكائنات في العلامات دون بادئة. بالنسبة لمعظم سيناريوهات تطبيق WPF ومن أجل تقريباً كافة الأمثلة المعطاة في مقاطع WPF SDK ، يتم تعيين مساحة اسم XAML الافتراضي إلى مساحة اسم WPF https://schemas.microsoft.com/winfx/2006/xaml/presentation. تقوم سمة xmlns:x بالإشارة إلى مساحة اسم XAML إضافية ، التي تقوم بتعيين مساحة اسم لغة XAML https://schemas.microsoft.com/winfx/2006/xaml.

هذا من الاستخدام لـ xmlns لتعريف نطاق الاستخدام و تعيين namescope هو متوافق مع مواصفات XML 1.0. namescopes XAML تختلف عن namescopes XML فقط في ذلك إن namescope XAML يستلزم أيضاً شيء حول كيفية نسخ العناصر الخاصة بـ namescope بالأنواع عندما يتعلق الأمر بدقة النوع والتحليل في XAML.

لاحظ أن xmlnsالسمات الضرورية فقط حصرا تشغيل العنصر الجذر من كل ملف XAML. xmlnsملفات تعريف ستطبق تشغيل الجميع العناصر التابعة للعنصر الجذر (th هو سلوك هو consهوtent مرة غير ذلك مع مواصفات XML 1.0 xmlns.)xmlnsالسمات المسموح بها أيضا تشغيل عناصر غير ذلك أسفل الجذر، وقد تنطبق تشغيل أي العناصر التابعة للعنصر التعريف. على الرغم من ذلك، يترددون تعريف أو يمكن أن يؤدي redefinition من مساحات الاسم XAML علامات XAML الالنمط الذي هو صعوبة في القراءة.

WPFتطبيق معالج XAML به يتضمن بنية تحتية يحتوي على إدراك للتجميعات WPF الأساسية. WPFالأساسية تجميعات من المعروف أنها تحتوي على الأنواع التي دعم WPFتعيينات إلى مساحة الاسم الافتراضية XAML. تم تمكين هذا من خلال تكوين الذي هو جزء من ملف بناء المشروع الخاص بك و إنشاء WPF و أنظمة المشروع . لذلك، التصريح بمساحة الاسم الافتراضية XAML كـxmlns الافتراضي هو كل ما هو ضروري من أجل الاشارة إلى عناصر XAML التي تأتي من تجميعات WPF .

x: prefix

في مثال عنصر الجذر السابق ، فإن بادئة x:تُستخدم في تعيين مساحة الاسم XAML https://schemas.microsoft.com/winfx/2006/xaml ، والتي هي مساحة اسم XAML مخصصة تدعم ثوابت لغة XAML. هذة x: البادئة يتم استخدامها لتعيين مساحة اسم XAML تلك في قوالب المشاريع ، في الأمثلة ، وفي الوثائق خلال هذا SDK. مساحة اسم XAML بالنسبة للغة XAML تحتوي على عدة ثوابت برمجية التي ستستخدمها بشكل متكرر جدًا في XAML الخاص بك. يقوم التالي بسرد ثوابت برمجة بادئة x: الأكثر شيوعاً التي ستقوم باستخدامها:

  • x: مفتاح: قم بتعيين المفتاح فريد لكل مورد في ResourceDictionary(أو similar dictionary concepts in غير ذلك frameworks) . x:Keyفمن المحتمل أن يكون الحساب ل 90% منx:استخدامات سترى في ترميز للتطبيق WPF النموذجي.

  • x: فئة: يقوم بتعيين مساحة اسم CLR واسم الفئة للفئة التي توفر التعليمات البرمجية الخلفية لصفحة XAML. يجب أن يكون لديك فئة لاعتماد تعليمات برمجية-الخلف في كل طراز البرمجة WPF، و ولذلك يمكنك دائماً معرفة x:المعينة، حتى في حالة عدم وجود موارد.

  • x: اسم: يقوم بتحديد اسم كائن وقت التشغيل للمثيل الموجود في التعليمات البرمجية لوقت التشغيل بعد معالجة عنصر الكائن. بشكل عام، سيتم تكرار استخدم خاصية مكافئ المعرفة بواسطة WPF ل الاسم: x . خصائص مثل تعيين خصيصا إلى CLR النسخ للخاصية وبالتالي أكثر ملاءمة برمجة تطبيق، الموقع تستخدمها بشكل متكرر رمز وقت التشغيل للبحث عن عناصر مسماة من تهيئة XAML. الأكثر شيوعاً هي تلك خاصية FrameworkElement.Name. You might still use x:Name when the equivalent WPF framework-level Name property is not supported in a particular type. يحدث هذا في بعض سيناريوهات الحركة التالية .

  • x: ثابت: يتيح مرجع يقوم بإرجاع القيمة ثابت هو ليس خاصية otherwهوe XAML المتوافقة.

  • x: نوع: يقوم بإنشاء مرجع Type استناداً إلى نوع الاسم Th هو هو المستخدمة لتعيين سمات تأخذ Type، مثل Style.TargetType، على الرغم من استمرار تحتوي الخاصية على سلسلة الأصلي-إلى- Typeتحويل بطريقة التي x: نوع ترميز استخدام ملحق هو اختيارية.

هناك وحدات انشاء برمجية اضافية في مساحة اسم XAML / بادئة x: و التي ليست شائعة. للمزيد من التفاصيل ، راجع مساحة الاسم XAML (x:) ميزات اللغة.

بادئات مخصصة وأنوع محصصة في XAML

الخاص بك مخصص كـ semblies أو كـ semblies خارج الأجزاء الأساسية WPF PresentationCore و PresentationFramework و WindowsBكـe، يمكنك تحديد كـ sembly كـ جزء من مخصصة xmlnsالتعيين. ثم يمكنك مرجع أنواع من هذا تجميع في الخاص بك XAML، طالما حتى تنفيذ هذا النوع بشكل صحيح لدعم الاستخدامات XAML أنت بصدد.

التالي هو مثال أساسي لكيفية عمل بادئات المخصصة في العلامات XAML. بادئة custom معرفة في العلامة عنصر الجذر ويتم تعيينها إلى تجميع معينة التي تم حزمها و متوفرة مع التطبيق. يحتوي هذا التجميع على نوع NumericUpDown ، الذي يتم تطبيقه لدعم استخدام XAML كما باستخدام وراثة فئة التي تسمح بإدراجها عند هذه النقطة المعينة في طراز المحتوى XAML WPF . مثيل عنصر التحكم NumericUpDown هذا يتم تعريفه كعنصر الكائن باستخدام البادئة بحيث يعلم محلل XAML مساحة الاسم XAML التي تحتوي على النوع و ولذلك حيث تجميع النسخ يكون هو الذي يحتوي على تعريف النوع.

<Page
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:custom="clr-namespace:NumericUpDownCustomControl;assembly=CustomLibrary"
    >
  <StackPanel Name="LayoutRoot">
    <custom:NumericUpDown Name="numericCtrl1" Width="100" Height="60"/>
...
  </StackPanel>
</Page>

للحصول على صواب المعلومات حول الأنواع المخصصة في XAML ، راجع XAML وفئات مخصصة ل WPF.

للحصول على مزيد من المعلومات حول كيفية ارتباط مساحات أسماء XML و مساحات الأسماء الخاصة بالتعليمات البرمجية للنسخ في التجميعات ، راجع مساحات الاسم XAML وتعيين مساحة الاسم ل XAML WPF.

أحداث و التعليمات البرمجية الخلفية لـ XAML

لمعظم WPFالتطبيقات تتكون من كل من ترميز XAML و تعليمات برمجية-الخلف. داخل المشروع ، يُكتب الـ XAML كملف .xaml ، و لغة CLR مثل Microsoft Visual Basic .NET أو #C تُستخدم لكتابة ملف التعليمات البرمجية الخلفية . عند ملف XAML هو ترميز التجميع كجزء من WPF البرمجة وتطبيق النماذج، الموقع التعليمة البرمجية XAML-خلف ملف لملف XAML هو التعرف عليها بواسطة تحديد مساحة الاسم والفئة x:Classسمة للعنصر الجذر في XAML.

في الأمثلة حتى الآن ، لقد قمت بمشاهدة أزرار متعددة إلا أنه أي من هذه الأزرار له سلوك منطقي مقترن بهم حتى الآن. آلية مستوى التطبيق الأساسي لإضافة سلوكًا لعنصر كائن هو لاستخدام جدث موجود في فئة العنصر ثم كتابة معالج محدد لهذا الحدث الذي يتم استدعاؤه عند تشغيل هذا الحدث في وقت التشغيل . اسم الحدث واسم المعالج للاستخدام يتم تحديده في العلامات ، بينما يتم تعريف التعليمة البرمجية التي تقوم بتنفيذ المعالج الخاص بك في التعليمات البرمجية الخلفية .

<Page 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    Dim b As Button = e.Source
    b.Foreground = Brushes.Red
End Sub
namespace ExampleNamespace
{
  public partial class ExamplePage
  {
    void Button_Click(object sender, RoutedEventArgs e)
    {
      Button b = e.Source as Button;
      b.Foreground = Brushes.Red;
    }
  }
}

لاحظ أن ملف التعليمات البرمجية الخلفية يستخدم مساحة اسم CLR ExampleNamespace كما يقوم بتعريف ExamplePage كفئة جزئية داخل مساحة الاسم تلك . يوازي هذا قيمة سمة x:Class لــ ExampleNamespace.ExamplePage الذي تم توفيره في جذر العلامات. يقوم بإنشاء برنامج التحويل البرمجي للعلامات WPF فئة جزئي لأي تصنيف ملف XAML، بواسطة اشتقاق فئة من نوع العنصر الجذر. عندما توفر التعليمات البرمجية الخلفية التي تعرف أيضاً الفئة الجزئية نفسها ، يتم تجميع التعليمات البرمجية الناتجة ضمن نفس مساحة الاسم و الفئة للتطبيق المترجم.

لمزيد من المعلومات حول متطلبات للتعليمات البرمجية-خلف البرمجة في WPF، راجع قسم "تعليمات برمجية-الخلف معالج الأحداث ومتطلبات فئة جزئي" من تعليمات برمجية-الخلف و XAML في WPF.

إذا لم تكن تريد إنشاء ملف تعليمات برمجية خلفية منفصل, يمكنك أيضاً تضمين التعليمات البرمجية الخاصة بك في ملف XAML. ومع ذلك، التعليمات البرمجية المضمنة هي تقنية versatile التي لها قيود واضحة . للمزيد من التفاصيل ، راجع تعليمات برمجية-الخلف و XAML في WPF.

أحداث موجهة

حدث معين ميزة وهي أساسية إلى WPFهو توجيه الأحداث . تقوم الأحداث الموجهة بتمكين عنصر لمعالجة حدث ما قبل انشاءه بعنصر آخر طالما العناصر متصلة من خلال علاقة شجرة. عند تحديد معالجة الحدث بسمة XAML يمكن سرد الأحداث الموجهة و معالجتها على أي عنصر بما في ذلك العناصر التي يحظر عليها سرد ذلك الحدث المعين في جدول أعضاء الفئة. ويتم تحقيق ذلك بواسطة تعريف سمة اسم الحدث باسم فئة المالك. على سبيل المثال، مثال StackPanel الأصل في StackPanel / Button الجارية يمكنه تسجيل معالج حدث Click الخاص بزر العنصر التابع عن طريق تحديد سمة Button.Click على عنصر الكائن StackPanel باسم المعالج الخاص بك كـقيمة السمة. للحصول على المزيد من المعلومات حول كيفية عمل الأحداث الموجهة، راجع نظرة عامة حول الأحداث الموجهة.

XAML العناصر المسماة

بشكل افتراضي، حالة الكائن فيها هو التي تم إنشاؤها في رسم كائن بمعالجة XAML عنصر الكائن لا تحتوي المعالجة مرجع معرّف أو كائن فريد. وعلى العكس، إذا الاستدعاء على منشئ في التعليمة البرمجية، فدائما استخدام النتيجة المنشئ لتعيين متغير مثيل constructed، حيث يمكنك مرجع المثيل لاحقاً في تعليمات برمجية الخاصة بك. لتوفير الوصول القياسي إلى الكائنات التي تم إنشاؤها من خلال تعريف علامات ، يقوم XAML بتعريف x:Name attribute. يمكنك تعيين قيمة سمة x:Name على أي عنصر الكائن. في التعليمات البرمجية الخلفية الخاصة بك ، المعرف الذي تقوم باختياره لمتغير مثيل الذي يشير إلى المثيل المكون. في الجميع نواحي، تسمى دالة عناصر كـ إذا كانت مثيلات الكائن (يشير الاسم هذا المثيل)، ويمكن الرجوع إلى الخلف تعليمات برمجية الخاصة بك العناصر المسماة لمعالجة تفاعلات وقت التشغيل في تطبيق. Th هو الاتصال بين مثيلات والمتغيرات هو accomplهوhed ببرنامج التحويل البرمجي للعلامات XAML WPF وأشياء أخرى تحديداً تتضمن الميزات وأنماط مثل InitializeComponentالتي لن يتم dهوcussed بالتفصيل في ترتيب هو الموضوع.

عناصر XAML مستوى إطار عمل WPF ترث من خاصية Name التي تكافيء سمة XAML x:Name المعرفة . فئات أخرى أيضاً تقوم بتوفير معادلات مستوى الخاصية لـ x:Name ، والذي يتم تعريفها أيضاً بشكل عام كـخاصية Name . التحدث بشكل عام، إذا لم تعثر على Nameخاصية في جدول الأعضاء للعنصر الخاص بك الذي تم اختياره/نوع، استخدم x:Nameبدلاً من ذلك. x:Nameسيوفر قيم معرّف إلى عنصر XAML التي يمكن استخدامها في وقت التشغيل، أما بأنظمة فرعية معينة أو بوظائف أداة مثل FindName.

المثال التالي يقوم بتعيين Name على عنصر StackPanel : ثم، المعالج على Button داخل هذا StackPanel يقوم بالاشارة إلى StackPanel من خلال مرجع المثيل الخاص به buttonContainer كما تم إعداده بواسطة Name.

<StackPanel Name="buttonContainer">


...


  <Button Click="RemoveThis">Click to remove this button</Button>
</StackPanel>
 Private Sub RemoveThis(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
     Dim fe As FrameworkElement = e.Source
     If (buttonContainer.Children.Contains(fe)) Then
         buttonContainer.Children.Remove(fe)
     End If
End Sub
void RemoveThis(object sender, RoutedEventArgs e)
{
    FrameworkElement fe = e.Source as FrameworkElement;
    if (buttonContainer.Children.Contains(fe))
    {
        buttonContainer.Children.Remove(fe);
    }
}

متغير ما، مثل اسم مثيل XAML يخضع مفهوم النطاق، حيث يتم فرض أسماء إلى يكون فريداً ضمن نطاق معين هو أفضل. العلامات الأساسية التي تقوم بتعريف صفحة تشير إلى namescope XAML فريد واحد, مع حد namescope XAML الذي هو عنصر الجذر لهذة الصفحة . ومع ذلك، مصادر العلامات الأخرى يمكنها التفاعل مع صفحة في وقت التشغيل مثل الأنماط أو قوالب ضمن الأنماط، و مصادر العلامات غالباً تحتوي على XAML namescopes الخاص بهم التي لا تقوم بالضرورة بالتوصيل مع XAML namescope الخاص بالصفحة. للحصول على مزيد من المعلومات حول x:Name و namescopes XAML ، راجع Name ، س: اسم السمة, أو WPF XAML Namescopes.

الخصائص المرفقة و الأحداث المرفقة

تعين XAML ميزة لغة تمكن بعض الخصائص أو الأحداث بتعيين تشغيل أي عنصر، بغض النظر عن ما إذا كنت exهوts خاصية أو حدث في ملفات تعريف للنوع العنصر الذي عليه هو التي يتم تعيينها تشغيل. يسمى إصدار خصائص هذه الميزة الخاصية المرفقة ، إصدار أحداث يسمى الحدث المرفق . المفهوم، يمكن اعتبار خصائص المرفق والمرفق الأحداث كـ الأعضاء العمومية التي يمكن تعيينها في أي مكان في الكائن/عنصر XAML. ومع ذلك، التي عنصر/الفئة أو البنية تحتية لأكبر يجب أن يعتمد مخزن خصائص نسخة احتياطية للقيم المرفقة.

الخصائص المرفقة في XAML تُستخدم عادةً خلال بناء جملة السمة . في بناء جملة السمة , حدد خاصية مرفقة في النموذج ownerType . propertyName.

هذا يشبه ما استخدام عنصر خاصية superficially، ولكن في هذه الحالة دوماً هو مالك نوع تحديد مختلف نوع من كائن العنصر الموقع المرفق الذي يتم تعيين الخاصية. ownerType هو النوع الذي يوفر وظائف أسلوب استرجاع القيمة مطلوبة من قبل معالج XAML الترتيب إلى قراءة أو تعيين القيمة خاصية المرفق.

السيناريو الأكثر شيوعاً للخصائص المرفقة هو تمكين العناصر التابعة من تقرير قيمة الخاصية إلى العنصر الأصل الخاص بها.

يوضح المثال التالي الخاصية المرفقة DockPanel.Dock . تقوم الفئة DockPanel بتعريف accessors لـ DockPanel.Dock وبالتالي يملك الخاصية المرفقة . تتضمن الفئة DockPanel أيضاً منطق يقوم بتكرير العناصر التابعة الخاصة به و بشكل خاص يقوم بالتحقق من كل عنصر ضمن لمجموعة قيم من DockPanel.Dock. إذا تم العثور على قيمة ، يتم استخدام هذه القيمة أثناء تخطيط لتحديد موضع العناصر التابعة. استخدام الخاصية المرفقة DockPanel.Dock و إمكانية تحديد الموضع هو بالفعل سيناريو محفز لفئة DockPanel .

<DockPanel>
  <Button DockPanel.Dock="Left" Width="100" Height="20">I am on the left</Button>
  <Button DockPanel.Dock="Right" Width="100" Height="20">I am on the right</Button>
</DockPanel>

في WPF، معظم أو الجميع الخصائص المرفقة أيضا تطبيق كـخصائص التبعيه. للمزيد من التفاصيل ، راجع نظرة عامة حول الخصائص المرفقة.

الأحداث المرفقة تستخدم ownerType مشابه . نموذج eventName من بناء جملة السمة. مثل الأحداث الغير مرفقة ، قيمة السمة لحدث مرفق في XAML يقوم بتعيين اسم الأسلوب المعالج الذي يتم استدعاؤه عند معالجة الحدث على العنصر . استخدامات الحدث المرفق في WPF XAML أقل شيوعاً. لمزيد من المعلومات، راجع نظرة عامة حول الأحداث المرفقة.

أنواع الأساس و XAML

الأساسية XAML WPF و مساحة الاسم XAML عبارة عن مجموعة من الأنواع التي تتوافق مع CLRالكائنات بالإضافة إلى عناصر ترميز الخاصة XAML. ومع ذلك، ليست كل الفئات يمكن تعيينها إلى عناصر. الفئات المجردة مثل ButtonBase, والفئات الأساسية الغير المجردة مستخدمة للتوريث في طراز كائنات CLR . فئات أساسية بما في ذلك تلك المجردة لا تزال مهمة بالنسبة لتطوير XAML لأن كل من عناصر XAML الخرسانة ترث الأعضاء من الفئة الأساسية في التسلسل الهرمي الخاص به. عادة ما يقوم هؤلاء الأعضاء بتضمين الخصائص التي يمكن تعيينها كـ السمات تشغيل العنصر، أو الأحداث التي يمكن معالجتها. FrameworkElementهو أساس الخرسانةواجهة المستخدمفئة منWPFفيالمستوى هيكل WPF. عند تصميم واجهة المستخدم ستقوم باستخدام الشكل المتنوع أو اللوحة أو الديكور أو فئات عنصر التحكم التي كافتها تشتق من FrameworkElement. الفئة الأساسية ذات الصلة, FrameworkContentElement ، تدعم عناصر موجهة إلى المستند التي تعمل بشكل جيد لتقديم تخطيط تدفق باستخدام واجهات API التي تعكس عن عمد واجهات API في FrameworkElement. التعيين السمات تشغيل المستوى العنصر و CLRطراز كائن يوفر لك التعيين من الخصائص العامة التي تكون قابلة للتعيين تشغيل الخرسانة معظم عناصر XAML، بغض النظر عن عنصر XAML خصوصية و به نوع المصدر.

أمن XAML

XAML هو لغة العلامات التي تمثل إنشاء مثيل للكائن و التنفيذ المباشر. لذلك، العناصر التي تم إنشاؤها في XAML لها نفس القدرة على التفاعل مع موارد النظام (الدخول على شبكة الاتصال , نظام الملفات IO ، على سبيل المثال) كما تفعل التعليمات البرمجية المنشأة المكافئة .

WPF يعتمد.NET إطار عمل الأمانأمان الوصول إلى التعليمات البرمجية (CAS). وهذا يعني إن محتوى WPF المشغل لمنطقة الانترنت قامت بتقليل أذونات التنفيذ. " أنجزتها XAML"(الصفحات XAML noncompiled تفسير في وقت تحميل بعارض XAML) و تطبيق مستعرض XAML (XBAP)تعمل عادة في هذه المنطقة إنترنت و استخدام نفس الأذونات مجموعة. ومع ذلك، XAML المحمل في التطبيق الموثوق به بالكامل لديه نفس الوصول إلى موارد النظام مثلما يفعل استضافة التطبيق. لمزيد من المعلومات، راجع الأمان ذا الثقة الجزئية الخاص بWPF.

تحميل XAML من التعليمات البرمجية

يمكن استخدام XAML لتعريف كافة واجهات المستخدم ولكنه أحياناً أيضاً يكون مناسباً لتعريف قطعة فقط من واجهة المستخدم في XAML. يمكن استخدام هذه الإمكانية لتمكين التخصيص الجزئي ، التخزين المحلي للمعلومات ، استخدام XAML يقوم بتوفير كائن أعمال أو العديد من السيناريوهات المحتملة. المفتاح لتلك السيناريوهات هو فئة XamlReader و أسلوب Load الخاص به . الإدخال هو ملف XAML و الاخراج عبارة عن كائن يمثل شجرة وقت التشغيل من الكائنات التي تم إنشاؤها من تلك العلامات. ثم يمكنك إدراج الكائن كي يكون خاصية من كائن آخر موجود بالفعل في التطبيق. حتى طالما الخاصية هي خاصية مناسبة في طراز المحتوى الذي له قدرات العرض للأحداث و الذي سيقوم بإعلام مشغل التنفيذ بإضافة محتوى جديد إلى التطبيق, يمكنك تعديل محتويات التطبيق التي قيد التشغيل بسهولة جداً عن طريق التحميل في XAML. لاحظ أن هذه الإمكانية تكون متوفرة بشكل عام فقط في التطبيقات التي تحظى الثقة الكاملة لوجود ضمانات الأمان الواضحة لتحميل الملفات في التطبيقات أثناء تشغيلها.

وماذا بعد

يوفر هذا الموضوع مقدمة أساسية XAML بناء المفاهيم والمصطلحات كما يتم تطبيقه WPF. للحصول على مزيد من المعلومات حول المصطلحات المستخدمة هنا ، راجع بناء جملة XAML بالتفاصيل.

إذا لم تكن قد قمت بالفعل بتنفيذ هذا, جرب التدريبات في مقال البرنامج التعليمي الشروع في استخدام WPF. عند إنشاء تطبيق العلامات مركزية الموصوف من قبل البرنامج التعليمي ، التمرين سيساعد على ترسيخ العديد من المفاهيم الموصوفة في هذا المقال .

WPF يستخدم نموذج تطبيق معين الذي يستند على فئة Application . للمزيد من التفاصيل ، راجع نظرة عامة حول إدارة التطبيق.

إنشاء تطبيق WPF (WPF) تمنحك المزيد من التفاصيل حول كيفية إنشاء تطبيقات XAML مضمنة من سطر الأوامر و بــ Microsoft Visual Studio.

نظرة عامة حول خصائص التبعية يوفر المزيد من المعلومات حول versatility الخصائص فيWPF ، و يقدم مفهوم خصائص التبعية.

راجع أيضًا:

المبادئ

بناء جملة XAML بالتفاصيل

XAML وفئات مخصصة ل WPF

نظرة عامة حول العناصر الأساسية

الأشجار فى الWPF

موارد أخرى

مساحة الاسم XAML (x:) ميزات اللغة

ملحقات XAML WPF