منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[تطبيق شامل] {8} - واجهة Smart - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغات البرمجة الاخرى (http://vb4arb.com/vb/forumdisplay.php?fid=4)
+--- قسم : قسم البرمجة بتقنية WPF (http://vb4arb.com/vb/forumdisplay.php?fid=86)
+---- قسم : قسم دورات تقنية WPF (http://vb4arb.com/vb/forumdisplay.php?fid=87)
+---- الموضوع : [تطبيق شامل] {8} - واجهة Smart (/showthread.php?tid=19707)



[تطبيق شامل] {8} - واجهة Smart - الشاكي لله - 19-03-17

السلام عليكم ورحمة الله وبركاته ..


الدرس السابق :


[تطبيق شامل] {7} - واجهة Smart




ماتم الوصول اليه :




مشاهدة





https://www.youtube.com/watch?v=zwtFLp_ONDw

وارجو المعذرة على رداءة الصوت



RE: [تطبيق شامل] {8} - واجهة Smart - السندبااد - 19-03-17

وعليكم السلام ورحمة الله وبركاته
الأداة بالفعل أصبحت مرنة جداً 
لكن عندما قمت بعمل Converter للفاصلة في الدقيقة 16 في الفيديو لم توضح لنا كيف قمت بربطه بأداة TextBlock

ألف شكر لك على الدرس الرائع
Smile



RE: [تطبيق شامل] {8} - واجهة Smart - الشاكي لله - 19-03-17

(19-03-17, 11:39 AM)السندبااد كتب :
وعليكم السلام ورحمة الله وبركاته
الأداة بالفعل أصبحت مرنة جداً 
لكن عندما قمت بعمل Converter للفاصلة في الدقيقة 16 في الفيديو لم توضح لنا كيف قمت بربطه بأداة TextBlock

ألف شكر لك على الدرس الرائع
Smile

اي والله شكله راح مع التقطيع هههههههه


لكن الخطوات معروفة ، نكررها دائما :
1- الذهاب الى الـ TextBlock الخاص بعرض البالانس
2- الذهاب الى خاصية Text الخاصة به ، والضغط على المربع -السحري- الذي بجانب الخاصية في الPropreties menu
3- اختيار Create Databinding
4- اختيار Ancestor Binding من القائمة ثم اختيار BalaceUserControl ثم اختيار خاصية Balance 
5- الذهاب الى اسفل الDialog ثم الذهاب الى الـ Converter combobox في الاسفل ، ثم الضغط على Add value Converter ثم واختيار الـclass الخاص بالكونفيرتال المطلوب .

وفي هذا الفيديو (الدرس قبل السابق) قمنا بعمل هذه الخطوات في الدقيقة 17:55
https://www.youtube.com/watch?v=28Xe2vUqMCM

Heart


RE: [تطبيق شامل] {8} - واجهة Smart - السندبااد - 19-03-17

هذا ما توقعته بالفعل
Wink
دروس الأدوات مميزة جداً؛ لأن صنع الأداة يوفر الكثير من العناء والوقت
رغم أن البعض يخاف من صنع الأداة ولكن الدروس بسطت الأمور جداً
أسأل الله تعالى أن يجعل ذلك في صحيفة أعمالك وأن يوفقك لإكمال هذه السلسلة الذهبية



RE: [تطبيق شامل] {8} - واجهة Smart - السندبااد - 23-03-17

أخي الحبيب الشاكي لله لاحظت أنك أشرت في الدرس أنك في الدروس المقبلة ستشرح عمل Chart إن شاء الله

أرجو لو تكرمت علينا أن يكون الدرس شاملاً لكل ما يتعلق بهذه الأداة لأنها مهمة جداً جداً
وفي تقنية wpf لا يوجد شرح لعملها إنما يوجد أمثلة جاهزة
في الموقع الذي تطبق عليه الدرس وضعوا مثالين لها كما تشاهد
[attachment=13610]
الأول: يحدد نسبة كل عنصر من العناصر الموجودة ضمن الـ chart إلى المجموعة؛ كنسبة الناجحين في كل محافظة إلى كامل الدولة.
الثاني: نسبة العنصر لوحده بشكل عام؛ كعدد الناجحين في المنامة نسبة إلى البحرين.

أيضاً تتميز بتغيير اللون والتلميحات والنسبة وغيرها من الخصائص
لأن بالفعل الموقع هذا عرض chart مميزة وشاملة
أقدر اهتمامك ولكن فقط أحببت التذكير والتنويه
Smile




RE: [تطبيق شامل] {8} - واجهة Smart - الشاكي لله - 23-03-17

(23-03-17, 02:25 PM)السندبااد كتب :
أخي الحبيب الشاكي لله لاحظت أنك أشرت في الدرس أنك في الدروس المقبلة ستشرح عمل Chart إن شاء الله

أرجو لو تكرمت علينا أن يكون الدرس شاملاً لكل ما يتعلق بهذه الأداة لأنها مهمة جداً جداً
وفي تقنية wpf لا يوجد شرح لعملها إنما يوجد أمثلة جاهزة
في الموقع الذي تطبق عليه الدرس وضعوا مثالين لها كما تشاهد

الأول: يحدد نسبة كل عنصر من العناصر الموجودة ضمن الـ chart إلى المجموعة؛ كنسبة الناجحين في كل محافظة إلى كامل الدولة.
الثاني: نسبة العنصر لوحده بشكل عام؛ كعدد الناجحين في المنامة نسبة إلى البحرين.

أيضاً تتميز بتغيير اللون والتلميحات والنسبة وغيرها من الخصائص
لأن بالفعل الموقع هذا عرض chart مميزة وشاملة
أقدر اهتمامك ولكن فقط أحببت التذكير والتنويه
Smile



نعم ، وانا متخمس كذلك الى صناعة اداتي الـ Chart

بالامس صورت الدرس الثالث من صناعة الاداة الحالية ، ولكن حصلت مشكلة بسببها اوقفت التصوير

وللان لم اجد حل هذه المشكلة للاسف Sad ، حيث باعتقادي انها Bug يتعلق بالBinding في الUsercontrol

المشكلة بسيطة وهي عدم استجابة الMultiValue converter في الdesign time بعد ثاني Call لها

بحثت ولم اصل الى نتيجة ولا حتى اي تلميح ، فالان انا احاول اكتشاف الحل لهذه المشكلة ، ولكن اعطوني مهلة يومين ان استطعت حلها فبها ، وان لم استطع اعدت التصوير وتجاهلتها .

وتحياتي


RE: [تطبيق شامل] {8} - واجهة Smart - السندبااد - 23-03-17

أسأل الله تعالى لك التوفيق أستاذي الحبيب وخذ كل وقتك
وبإذن الله تعالى عندما تنشر درس chart سأتابعه جيداً
وسأضع لك أي استفسار أو ملاحظة حتى تخرج الأداة بشكل احترافي ومميز

في هذا الدرس بقي فقط جزئية (تبديل أعمدة الجريد إلى صفوف) عند تصغير حجم النافذة
Smile



RE: [تطبيق شامل] {8} - واجهة Smart - السندبااد - 11-04-17

السلام عليكم ورحمة الله وبركاته
كيف جعلت Datatrigger تدعم الديزاين تايم ؟
Huh



RE: [تطبيق شامل] {8} - واجهة Smart - الشاكي لله - 13-04-17

اسف يبدو انني لم اضف السورس للـ Datatrigger المطور ، تم ارافقه في الرد

الطريقة هي باستخدام الوراثة من الـ Microsoft.Expression.Interactivity.Core.DataTrigger

ثم عمل Override الى دالة OnPropertyChanged وهي دالة تنطلق عند اي تغيير يحصل في احد خصائص الـ object في البليند
FrameworkElement.OnPropertyChanged Method - MSDN




فيوجد داخل هذي الدالة كودين اساسيين لجعل هذا الترييغر فعال في الـ DesignTime :
1. 
PHP كود :
this.Actions.ToList().ForEach(=> a.Attach(TargetObject)); 

وظيفته الدوران حول الاكشن المرتبطين بالـ Trigger وعمل Attach لهم للـ TargetObject وهو الـ Control الهدف (مثلا Progressbar)

لأن الـ Attach بطبيعة الحال يتم عند تشغيل البرنامج(runtime) وباتالي يتم ربط الاكشن بالكونترول عند التشغيل
ولكن ماقبل التشغيل في (Design time) لا يتم الربط بعد وبالتالي احتجنا هذا الكود ووضعناه في OnPropertyChanged خصيصا لانها تنطلق في الـDesign Time كذلك Smile




2. 
PHP كود :
this.InvokeActions(null); 


نعرف ان الـTigger وظيفته اطلاق الاكشن ، فهذا الكود ايضا وضغناه اسفل كود Attach ليطلق الاكشن بشكل Force ، اي استدعاء اجباري ، فنعرف ان الـTrigger يقوم باطلاق الاكشن اوتماتيكيا عند تحقق شرط معين ولكن هذا يحصل فقط في الـ Runtime ،  اما في الـDesing Time لابد من العنف واجبار الـTrigger على اطلاق الاكشن رغما عنه عند تحقق الشروط ، لذلك ترى الكود كاملا بهذا الاسلوب  Cool :


PHP كود :
       protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
 
       {

 
           base.OnPropertyChanged(e);
 
           if (TargetObject != null)
 
           {
 
               this.Actions.ToList().ForEach(=> a.Attach(TargetObject));

 
               if (Comparison == ComparisonConditionType.Equal)
 
               {
 
                   if (Binding.ToString() == Value.ToString())
 
                       this.InvokeActions(null);
 
               }
 
               else if (Comparison == ComparisonConditionType.GreaterThan)
 
               {
 
                   if (int.Parse(Binding.ToString()) > int.Parse(Value.ToString()))
 
                       this.InvokeActions(null);
 
               }
 
               else if (Comparison == ComparisonConditionType.GreaterThanOrEqual)
 
               {
 
                   if (int.Parse(Binding.ToString()) >= int.Parse(Value.ToString()))
 
                       this.InvokeActions(null);
 
               }
 
               else if (Comparison == ComparisonConditionType.LessThan)
 
               {
 
                   if (int.Parse(Binding.ToString()) < int.Parse(Value.ToString()))
 
                       this.InvokeActions(null);
 
               }
 
               else if (Comparison == ComparisonConditionType.LessThanOrEqual)
 
               {
 
                   if (int.Parse(Binding.ToString()) <= int.Parse(Value.ToString()))
 
                       this.InvokeActions(null);
 
               }
 
               else if (Comparison == ComparisonConditionType.NotEqual)
 
               {
 
                   if (Binding.ToString() != Value.ToString())
 
                       this.InvokeActions(null);
 
               }
 
           }
 
       


وهذه الطريقة يمكنك استعمالها مع بقية الـTrigger وتطويرها بنفس الاسلوب لتدعم الـDesign Time
بشرط ان لاتقوم باضافة ConditionList ـ لان الـ Condition يحتاج تطوير ايضا ليدعم الـ DesignTime وتطويره معقد نوعا ما وعند تطويره اساسا ستكون مجبرا على كتابة الـ ConditionList يدويا بـ Xaml ، فلا يمكنك استعمال المربع  Sad  :




RE: [تطبيق شامل] {8} - واجهة Smart - السندبااد - 30-04-17

شكراً للتوضيح أستاذي العزيز
بخصوص التلوين الأوتوماتيكي للبروجريس بار، يوجد طريقة أخرى، جربتها وقد نجحت
وهي طريقة Convert وهي تدعم الديزاين تايم، وهذا هو الكود:



PHP كود :
    Public Function Convert(value As ObjecttargetType As Typeparameter As Objectculture As CultureInfo) As Object Implements IValueConverter.Convert
        Dim TimeRemaining 
As Double System.Convert.ToDouble(value)
        If TimeRemaining And TimeRemaining 25 Then
            
Return New SolidColorBrush(Colors.Red)
        ElseIf TimeRemaining >= 25 And TimeRemaining 50 Then
            
Return New SolidColorBrush(Colors.Orange)
        ElseIf TimeRemaining >= 50 And TimeRemaining 75 Then
            
Return New SolidColorBrush(Colors.Blue)
        ElseIf TimeRemaining >= 75 Then
            
Return New SolidColorBrush(Colors.Green)
        End If
    End Function