ميزات AvaloniaUI باستخدام MessageBox المخصصة

Avalonia ui هو إطار مبهج تريد العودة إليه مرارًا وتكرارًا. لذلك دعونا نعود إليها مرة أخرى وننظر في بعض الميزات من خلال صندوق الرسائل الخاص بي.



من هو أفالونيا؟


Avalonia هو إطار عمل متعدد المنصات يسمح لك بتطوير واجهات رسومية على جميع الأنظمة الأساسية الحالية.

في هيكلها ، أنها قريبة بشكل لا يصدق من wpf: xaml مماثلة ، ملزمة مماثلة. هناك حتى برنامج تعليمي رسمي لمطوري wpf.

من الجدير بالذكر أن Avaloniya هي أيضًا حقيقة أنه في كل نظام يصل إلى واجهاته الأصلية: Win32 و MonoMac و X11 ...

ما ظهر في النسخة المحدثة
  1. دعم 13 الرموز رسالة مختلفة.
  2. القدرة على نسخ نص الرسالة باستخدام تركيبة المفاتيح Cntrl + C.
  3. اضبط حجم النافذة حسب محتوياتها.
  4. نظام أسلوب مبسط يسمح لأي شخص بالمشاركة بسهولة في تطوير ودعم أنظمة جديدة.
  5. استبدال TextBlock بـ TextBox ، يمكن الآن تحديد النص الموجود في النافذة.
  6. تم إعادة تصميم الهيكل بالكامل.


يمكن الاطلاع على الوثائق في gitlab .

الحزمة نفسها يمكن تحميلها من nuget .

دعنا نتحدث عن الميزات


من الواضح ، إذا كانت هناك مقارنات ، فستتم مقارنتها بـ wpf.

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

<Button Command = "{Binding RunTheThing}" CommandParameter = "Hello World"> Do the thing! </ Button> 

  public void RunTheThing (string parameter) { // Code for executing the command here. } 

تم تصميم Avaloniya أيضًا باستخدام إضافات تفاعلية ، والتي تتيح العمل مع أحداث الإطار كما هو الحال مع كائنات من الدرجة الأولى باستخدام بناء جملة استعلام LINQ التعريفي - مما يسمح لك بكتابة رمز موجز وقابل للقراءة.

لكن مع التقدم قليلاً ، يصبح كل شيء غير وردي للغاية ، ولم يتم وضع الوثائق في الاعتبار بعد (ولكن يمكنك المساعدة).

ملزمة للصورة


كانت المشكلة التي واجهتها فورًا تقريبًا عند تحديث مشروعي هي كيفية عرض الصور على نافذتي.

تحتاج أولاً إلى تسجيل دليل بالصور كمورد من avalonia لأنه من المهم أن يتم عرض الأيقونات في أي مستخدم ومعبأة بكل رمز.
  <ItemGroup> ... <AvaloniaResource Include = "Assets \ *" /> </ ItemGroup> 

الآن يمكنك بسهولة تعيين الصورة المحددة في علامة الصورة.

  <Image Source = "/ Assets / error.ico" /> 


ولكن عند استخدام vm Source ، لا يمكن ببساطة نقل صور إلى سلسلة ، ولكن يجب عليك استخدام الصورة النقطية.

  <Image Source = "{Binding ImagePath}" /> 

  public Bitmap ImagePath {get; private set; } 


وبالتالي ، نحتاج الآن إلى استخراج صورتنا من الموارد. ما تحتاج إلى استخدام تحديد المواقع أفالونيا.

  ImagePath = new Bitmap (AvaloniaLocator.Current.GetService <IAssetLoader> () .Open (new Uri ($ "avares: // ASSEMBLYNAME / relative / project / path / {ImageName} .ico"))); 

تجدر الإشارة إلى أنه بالنسبة للموارد المضمنة عند تجميع uri ، يتم استخدام resm: // بادئة ، وللأفالونيا - avares: // .

رسم


الأرقام في avalonia و wpf متشابهة ، لكن الخصائص العامة مختلفة. لذلك ، بعد تنزيل صور svg وتحويلها إلى ms xaml باستخدام inskape ، لا يمكن الوصول إليها على الفور.

شكل تعسفي

  <PathGeometry Figures = "M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297" FillRule = "NonZero" /> 

يتحول إلى

  <GeometryDrawing Brush = "# FF50C8EF" Geometry = "M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297" /> 

خط

  <Line X1 = "25" Y1 = "37" X2 = "25" Y2 = "39" StrokeThickness = "2" Stroke = "# FFFFFFFF" StrokeMiterLimit = "10" StrokeStartLineCap = "Round" StrokeEndLineCap = "Round" /> 

يتحول إلى

  <Line StartPoint = "25.37" EndPoint = "25,39" StrokeThickness = "2" Stroke = "# FFFFFFFF" StrokeStartLineCap = "Round" StrokeEndLineCap = "Round" /> 

الأنماط


يتم وصف الأنماط نفسها بشكل كاف في الوثائق .

تجدر الإشارة إلى أن هذه الأساليب مألوفة مع مزيج صغير من المغلق.

أردت أن أوضح كيفية تطبيق النمط من ملف منفصل.

أولاً ، يجب أن تكون جميع ملفات xaml موارد avalonian.

  <ItemGroup> <AvaloniaResource Include = "** \ *. Xaml"> <SubType> Designer </ SubType> </ AvaloniaResource> ..... </ ItemGroup> 

ثانياً ، يتم تطبيق الأنماط بالطريقة نفسها التي تستخدم بها موارد الصورة باستخدام uri و locator.

  YourControl.Styles.Add (new StyleInclude (new Uri ("avares: //ASSEMBLYNAME/relative/project/path.xaml")) {Source = new Uri ("avares: // ASSEMBLYNAME / relative / project / path.xaml ")}); 

أشياء صغيرة لطيفة.


TextBox لديه خاصية العلامة المائية

يسمح ذلك بعدم البحث عن حزم تابعة لجهة خارجية وليس عن تثبيت نص TextBlock أعلى TextBox ، والذي يمكن قراءته في العديد من البرامج التعليمية لـ wpf.

  <TextBox Watermark = "Street address" /> 

كذلك ، يستخدم كل الربط الافتراضي PropertyChanged لتشغيل تحديث الخاصية المرتبطة.

في الختام


أقترح على الجميع تجربة هذا الإطار المثير للاهتمام.

شكرا للمستخدمين Artyom Gorchakov ونيكيتا تسوكانوف .

وأذكرك أن أفالونيا تحظى بدعم دافئ ومذهل في Gitter.

Source: https://habr.com/ru/post/ar457116/


All Articles