دوشنبه ۹ اسفند ۱۳۹۵
 
 
 
کلمه عبور خود را فراموش کرده اید؟
 

 
 
 نگاهی به تکنولوژی WPF
WPF Graphics
تاریخ ثبت:  ۸۷/۸/۱۸
تعداد نمایش:  ۸۱۰۹
  نویسنده: مهدی کیانی
 
   ۱۱  نفر تا این لحظه به این مقاله امتیاز داده اند.
 
   Bookmark and Share

مقدمه ای بر تکنولوژی Windows Presentation Foundation

تکنولوژي هاي جديد دات نت

از زمان ظهور دات نت، با اولين نسخه آن يعني دات نت فريم ورک 1.0 که همراه با ويژوال استوديو 2002 همراه بود، تا به امروز که شاهد نسخه 3.5 از اين تکنولوژي مي باشيم، تغييرت بسياري در آن به وجود آمده است. افزوده شدن کلاس هاي جديد در غالب فايل هاي DLL اي که ما آن ها را دات نت اسمبلي مي ناميم، همچنين اضافه شدن تکنولوژي هاي جديد به اين مجموعه باعث گسترش کاربرد اين مجموعه شده است.

همزمان با ظهور نسخه 3.0 دات نت فريم ورک، تکنولوژي هاي جديدي نيز به وجود آمد. اين تکنولوژي ها، که بر خلاف تصور سطحي و ابتدايي بسياري از برنامه نويسان در ابتداي ظهور آن ها، صرفا اضافه شدن تعدادي دات نت اسمبلي به دات نت اسمبلي هاي قبلي، تلقي مي شد، تغييرات بسياري را در امر برنامه نويسي دات نت به وجود آورد. تکنولوژي WPF به همراه تکنولوژي هاي WCF و WWF با نسخه 3.0 دات نت فريم ورک توسط شرکت ماکروسافت معرفي شدند.

در ادامه توضيح مختصري راجع به WCF و WWF خواهيم ديد و سپس به بحث اصلي، يعني WPF خواهيم پرداخت.

Windows Communication Foundation

تکنولوژي WCF که مخفف Windows Communication Foundation مي باشد، ترکيب شده تکنولوژي هاي ارتباطي مختلفي که در دات نت فريم ورک 2.0 وجود داشت، مي باشد. در دات نت فريم ورک 2.0 ، تکنولوژي هاي ارتباطي بين سيستم ها عبارت بودند از، ارتباطات بر پايه Soap ، ارتباطات دودويي بهينه شده و... . تکنولوژي WCF که با نام Indigo نيز شناخته مي شود، تمامي جنبه هاي ارتباطي بين سيستم ها را درون خود دارد. جهت مطالعه بيشتر به آدرس Windows Communication Foundation و WCF مراجعه نماييد.

Windows Workflow Doundation

بتکنولوژي WWF که مخفف Windows Workflow Foundation مي باشد و بيشتر به صورت مخفف WF نشان داده مي شود، امکان پياده سازي و حل مسائل پيچيده دنياي پيرامون خود را که در حالت عادي ممکن است حل آن بسيار پيچييده و دشوار به نظر آيد، به صورت بصري و بسيار ساده ارائه مي کند. در کل دو شکل Sequential و State Machine را مي توانيد با WF پياده سازي کنيد. به عنوان نمونه بسيار ساده به راحتي مي توانيد يک دستور چند شرطي را به صورت کاملا انتزاعي و با امکاناتي که براي طراحي آن موجود است، پياده سازي نماييد. به عنوان مثال، نمونه زير، پياده سازي يک دستور چهار شرطي در سيستم WF از نوع Sequential مي باشد.

جهت اطلاعات بيشتر در مورد WF به آدرس هاي زير مراجعه نماييد

Windows Workflow Foundation و WWF

نکته: تکنولوژي ديگري که همراه با دات نت فريم ورک 3.0 منتشر شد، Windows CardSpace بود که با نام info Card نيز معروف مي باشد. که جهت اطلاعات بيشتر مي توانيد به آدرس هاي زير مراجعه نماييد

Info CardSpace

 

معرفي تکنولوژي WPF

بررسي نياز به اين تکنولوژي

پس از توضيح و اشارات مختصري درباره تکنولوژي هاي همپاي تکنولوژي WPF که ارتباط بسيار نزديکي نيز با هم دارند، اينک به معرفي تکنولوژي WPF خواهم پرداخت.

WPF سر آغاز سه کلمه Windows Presentation Foundation مي باشد. هر کسي که تا به حال در محيط هاي گرافيکي و يا به اصلاح برنامه نويسان، محيط هاي ويژوال، برنامه نويسي کرده باشد، يقينا با مفاهيم Windows Application ها که گاها به صورت مخفف WinApp نيز ناميده مي شوند، آشنا مي باشد. اين نوع برنامه نويسي همزمان با ورود سيستم عامل هاي ويندوز در دنياي کامپيوتر شروع شد و روز به روز با به وجود آمدن زبان هاي متفاوت جايگاه محبوبتري نزد برنامه نويسان پيدا کرد. در اينجا قصد توضيح دادن اين نوع برنامه نويسي را ندارم. فقط نگاهي گذرا به آن خواهم داشت تا مفهوم تکنولوژي WPF برايتان روشن تر گردد.

همانطور که مي دانيد، Windows Application ها، از API هاي سيستم عامل مربوطه ( که اکثرا ويندوز XP نيز مي باشد) براي ترسيم عناصر گرافيکي يا همان عناصر ويژوال، استفده مي کنند. به عنوان مثال براي ترسيم انواع دکمه ها، فرم ها و بسياري از عناصرديگري که با آن ها آشنا هستيد، از توابع API ويندوز کمک گرفته مي شود. همين مسئله باعث ايجاد محدوديت براي برنامه نويسان در ايجاد کنترل هاي سفارشي با ظاهر دلخواه خود شده بود. اگر چه با ابزار هاي گرافيکي که در دات نت فريم ورک 2.0 نيز وجود داشت، مي توانستيم تا حد خوبي اقدام به ايجاد کنترل هاي مورد دلخواه خود را بکنيم، اما اين موضوع نياز به دانستن اطلاعات زياد در مورد ايجاد کنترل هاي سفارشي و همچنين نوشتن گاها کد هاي بسيار زيادي جهت ايجاد کنترل مورد نظر مي بود. اين به آن دليل بود که قالب و اساس اوليه کنترل ها بسته بود و نمي توانستيد به راحتي کنترل ها را شخصي سازي نماييد. در بهترين حالت، يک برنامه نويس ماهر ميتوانست با ارث بري از کلاس Control اقدام به ايجاد يک کنترل جديد با ظاهر و امکانات مورد نظر خود بکند. به عنوان مثال کنترل منوي زير را اخيرا براي شرکتي طراحي کردم. تنها، يکي از کلاس هاي اين منو داراي 1000 خط کد به غير از کدهاي توليد شده توسط خود دات نت مي باشد. شايد 1000 خط، براي يه برنامه نويس بسيار ناچيز باشد. ولي چنانچه بخواهيد تمامي کنترل هاي برنامه هاي خود را، خودتان طراحي کنيد، مي بينيد که زمان زيادي از وقت شما صرف نوشتن کد ها مي گردد.

اين مسئله زماني نمود بيشتري پيدا ميکند که بخواهيد، اکثر جنبه هاي يک کنترل را در کنترل سفارشي خود قرار دهيد. به عنوان مثال به دليل قرار گرفتن حالت هاي مختلف گراديان بر روي منو، استفاده از امکانات قبلي مانند ترسيم متن آيتم به صورت اتوماتيک توسط خود منو و يا ترسيم کليد هاي ميان بر آيتم و .... از بين مي رود و تمامي اين موارد بايستي با کد و توسط شما ايجاد گردد. درست است که مي توان از کنترل هاي ايجاد شده توسط خودتان به کرات و در برنامه هاي مختلف استفاده کنيد ولي تجربه نشان داده است که گاهي نيز مجبور به ايجاد کنترل ديگري شويد. اين به اين دليل نيست که شما الزاما کنترل قبلي خود را خوب طراحي نکرده ايد. عوامل زيادي مي توانند باعث بروز اين مورد شوند که پرداختن به آن ها از حوصله اين بحث خارج است.

معرفي WPF

حال که تا حدودي با مشکلات برنامه نويسي هاي WinApp به روش جاري شديد، در ادامه به معرفي WPF خواهم پرداخت و در ادامه بحث هاي اين آموزش، خواهيد ديد که WPF چگونه بسياري از مشکلات موجود را مرتفع مي کند.
تکنولوژي WPF به روشي ديگر عمل مي کند. در واقع علاوه بر اينکه اين تکنولوژي همچنان داراي کنترل هاي سابقي که آن ها را مي شناسيد، مي باشد، مي تواند دسترسي به بيشتر جنبه هاي کنترل ها را براي شما فراهم کند. در واقع قدرت WPF در اين است که اساس و پايه هر کنترلي مانند برنامه نويسي قبل، بسته نيست و اين شما هستيد که به WPF خواهيد گفت که متن روي کنترل را به چه صورتي طراحي کنيد. يا پس زمينه کنترل يا کناره هاي آن را به آن صورتي که شما مي گئييد طراحي کند. به همين منظور نيز داراي ابزارهاي بسيار زيادي جهت کار براي طراحي کنترل هاي شما مهيا مي کند. ابزارهايي مانند قلم مو هاي گراديان با تعداد رنگ هاي نامحدود، انواع ابزار هاي گرافيکي براي ترسيم شکل دلخواه شما، امکان ايجاد افکت هاي بسيار زيبا و متنوع بر روي هر قسمتي از کنترل که بخواهيد، وجود افکت هاي از پيش تعريف شده، امکان طراحي هاي 2 بعدي و نيز 3 بعدي، امکان ايجاد انيميشن و بسياري از امکانات ديگر که به مرور با آن ها آشنا خواهيد شد.

پايه و اساس WPF بر Directx استوار مي باشد. اين موضوع سبب مي شود که بتوان از بسياري از جنبه هاي گرافيکي بدون ايجاد سربار اضافي بر روي برنامه بهره برد و در واقع برنامه هايي با ظاهر هايي بسازيد که ساختن آن ها با برنامه نويسي هاي پيشين يا غير ممکن و يا متحمل کار بسيار زيادي بوده است. اگرچه نقطه قوت اين تکنولوژي اعمال گرافيکي، انيميشن و .. مي باشد، ولي اين بدان معني نيست که نمي توان با WPF اقدام به ايجاد فرم ها و کنترل هاي سابق نمود. اين تکنولوژي به شما امکان استفاده از کنترل هاي پيشين را مي دهد و همچنين برنامه نويسي WinApp را به همان شکلي که مي شناسيد، براي شما مقدور مي سازد. علاوه بر اين موارد، WPF امکان کار با اسناد متني، کنترل کردن بر روي نحوه Print شدن آن ها و ... را براي شما مهيا مي سازد.
نکته ديگري که در مورد WPF بايد بدان اشاره کرد، امکان برنامه نويسي به شيوه اي است که شايد تاکنون امثال آن را يا نديده ايد و يا بسيار کم ديده ايد و آن هم برنامه نويسي بر اساس عناصري در WPF مي باشد که به آن ها Page مي گويند. اين نوع برنامه نويسي را مي توان به نوعي شبيه سازي برنامه هاي وب نامگذاري کرد. اين نوع برنامه نويسي WPF Browser Application نام دارد که در بخش هاي بعدي تفاوت آن را با برنامه نويسي معمولي WPF خواهيد آموخت. توسط اين مدل برنامه نويسي، مي توانيد اسمبلي هاي ايجاد شده را در مرورگر وب نظير Internet Explorer بدون پيغام هاي امنيتي که معمولا در صفحات وب وجود دارند، نمايش دهيد. به عنوان مثال عکس زير نمونه اي از نحوه استفاده از Page جهت نمايش وب سايت ها در يک برنامه WPF مي باشد.

البته استفاده از امکانات مختلف گرافيکي به مانند آنچه در برنامه هاي WPF امکان پذير است، در برنامه هاي بر پايه صفحه ، امکان پذير نيست. دلايل اين موضوع را در بخش هاي آتي خواهيد دانست.

User32، GDI، GDI+ و DirectX

به طور کلي برنامه هاي ويندوزي از دو امکان، توابع User32 و GDI/GDI+ براي ترسيم عناصر گرافيکي استفاده مي کنند که User32 امکان ترسيم عناصر ويژوال را با ظاهر عادي مهيا مي کند. عناصري مانند فرم ها، دکمه ها و ... و GDI/GDI+ امکانات گسترده تري را جهت ايجاد برخي اعمل گرافيکي مانند ايجاد گراديان ها و ... را مهيا مي کنند.

شرکت ماکروسافت به دليل محدوديت هايي که در هر يک از دوبخش فوق، وجود داست، اقدام به ايجاد کتابخانه سطح بالايي به نام DirectX کرد.( حرف X مي تواند جايگزين کلماتي مانند Sound و .. شود). اين ابزار که امروزه نيز از آن استفاده هاي زيادي ميشود،( از جمله در ايجاد بازي هاي سه بعدي و ... ) با بهره گيري از توان کارت هاي گرافيکي با بهره بري بالا، حداکثر توان آن را براي ايجاد گرافيک هاي قوي به کار مي برد.

اما با قدرت زياد اين کتابخانه، به دليل برقراري ارتباط مشکل با ان و نياز به کد نويسي هاي زياد، اين ابزار بيشتر در تهيه بازي ها و برنامه هاي گرافيکي مورد استفاده قرار گرفت و جايگاه زيادي در توسعغه برنامه هاي تجاري پيدا نکرد.

تکنولوژي WPF تمامي اين مشکلات را مرتفع کرد و در واقع کاربر را از درگير کردن نوشتن کدهاي زياد و گاه طاقت فرسا به صورت مستقيم در DirectX ، رهايي داد. WPF از تمامي قدرت DirectX جهت ايجاد گرافيک هاي 2 بعد، 3 بعدي، ايجاد انيميشن ها، استفاده مي کند. همچنين ابزار هاي بسياري را جهت طراحي کردن در اختيار شما قرار مي دهد. علاوه بر اين DirectX به جهت اينکه به خوبي با مفاهيم Texture، Gradient و ... تطبيق پيدا مي کند، دراراي سرعت بالاتري نسبت GDIو GDI+ مي باشد. به اين دليل که اين تکنولوژي ها براي رندر کردن از روش پيکسلي و الگوريتم هاي آن که اصطلاحا Pixel By Pixel Instruction گفته مي شود، استفاده مي کنند.

يکي ديگر از مشکلاتي که کار کردن با DirectX به صورت مستقيم وجود داشت( دارد) به دليل نوع بهينه سازي و نحوه رندر کردن اشکال توسط کارت هاي ويديويي متفاوت بود، که با WPF اين مشکل نيز مرتفع شده است.

يکي از مهمترين اهداف WPF استفاده از GPU به جاي CPU جهت انجام روتين هاي پيچيده گرافيکي مي باشد که اين امر باعث آزاد بودن CPU بوده که ميتواند به پردازش هاي ديگر در سيستم رسيدگي کند.

WPF به عنوان يک API سطح بالا

همناطور که پيشتر توضيح داده شد، WPF قادر به انجام کار هاي بسياري براي شما خواهد بود که قبل از آن، انجام آن ها بسيار مشکل و زمان بر ونياز به نوشتن کد هاي بسياري مي بود. در ادامه به صورت ليست وار، تعدادي از امکانات اين تکنولوژي همراه با توضيح مختصر آمده است:

طرح بندي اجزا و عناصر برنامه شبيه برنامه هاي تحت وب: WPF از عناصر جديد و بسياري دي تراز بندي و چيدمان کنترل ها و عناصر مختلف بر روي فرم هاي برنامه شما استفاده ميکند. توسط اين ابزار ها که از کلاس پايه Panel ارث بري مي کنند، قادر خواهيد بود که چديمان عناصر خود را چنان تنظيم کنيد، که برنامه شما در رزولوشن هاي مختلف به خوبي قابل نمايش باشد.

نکته مهم و بسيار حياتي در هنگام کار کردن با تکنولوژي WPF

يک برنامه نويس WPF حرفه اي حتي المقدور از خواص Width و Height اشياء براي چيدمان آن ها استفاده نخواهد کرد. يقينا برايتان غير قابل تصور است. به اين دليل که تا الان هر عنصري که در برنامه خود استفاده کرده ايد، پس از نامگذاري آن اقدام به ايجاد سايز مناسب آن نمده ايد. اما در نمونه برنامه ها و بخش هاي آتي خواهيد ديد، که کمترين استفاده را از اين دو خاصيت خواهيم کرد. اين موضوع به دليل ماهيت WPF و غير وابسته بودن به رزولوشن صفحه نمايش مي باشد که در قسمت بعدي بيشتر به شرح آن خواهم پرداخت.

برخي از امکانات و جنبه هاي برنامه نويسي با WPF

مدل قدرتمند و قوي طراحي

توسط WPF از درگير شدن با پيکسل ها و کار کردن بر روي ان ها رهايي خواهيد يافت و در واقهع با ابجکت ها و اشکال سطح بالا تعامل خواهيد داشت. همچنين قادر به ايجاد اشکال سه بعدي و... خواهيد بود.

نکته: يکي از محدوديت هايي که WPF داراست، کار کردن با اشکال سه بعدي مي باشد. در واقع گرچه با WPF به خوبي مي توانيد اقدام به ترسيم اين نوع اشکال نماييد، اما از لحاظ کارايي، اشکال سه بعدي ايجاد شده با WPF کارايي کمتري نسبت به نوع هاي مشابه و توليد شده با DirectX و يا OpenGL به صورت مستقيم مي باشد. به همين دليل چنانچه قصد نوشتن بازيهاي سه بعدي Real Time را داريد، WPF ممکن است انتخاب خوبي نباشد. چون ممکن است آن کارايي را که انتظار داريد براي شما فراهم نکند. در اين موارد مي توانيد از محيط هاي ديگر و مناسب اينگونه برنامه ها استفاده نماييد.

انيميشن، صدا و تصوير

همانطور که پيش تر نيز توضيح داده شد، علاوه بر انجام اعمال بسياري که مي توانيد، با اشکال انجام دهيد، اعم از چرخش، بزگر نمايي، کوچک نمايي و ...، نيز مي توانيد اقدام به ايجاد انيميشن هاي زيبا توسط WPF نماييد. همچنين قادر خواهيد فايل هاي صوتي و ويديويي را به خوبي به کار بگيريد.

استايل ها و قالب ها

همواره يکي از دغدغه هاي برنامه نويسان ويندوز، ايجاد ظاهري زيبا براي فرم ها و عناصر خود بوده است. تا آن جا که اکثر برنامه نويسان به سراغ کامپوننت هاي شرکت هاي ثالث که آن ها را Third party Components مي ناميم، رفته و از آن ها به کرات در برنامه هاي خود استفاده مي کرده و مي کنند. من جداي از اينکه اين کامپوننت ها چقدر در عمل و کارايي درست و حساب شده عمل مي کنند، و اينکه با معيار هاي زبان فارسي متناسب هستند ( که اکثرا نيستند)، دليل ديگري براي استفاده نکردن از اين نوع کامپوننت ها دارم و ان هم وابستگي برنامه شما به آبجکت ها و عناصر شرکت هاي ديگر خواهد بود. اين موضوع مي تواند در طولاني مدت و استفاده مکرر از اين نوع ابزار ها، ضررهاي جبران ناپذيري به برنامه نويسيان وارد نمايد. با تکنولوژي WPF تقريبا تمامي اين مشکلات رفع شده و به راحتي مي توانيد اقدام به ايجاد استايل ها و قالب هاي متناسب با معيار خود و برنامه خود، نماييد. چنانچه برنامه نويسي مسلط به اين موارد گردد، مطمئن هستم که ديگر به هيچ عنوان به دنبال ابزار هاي ظاهر سازي برنامه ها و کامپوننت هاي متفاوت نخواهد رفت.

دستورات ( Commands)

يکي از جنبه ها و امکانات فوق العاده زيبا و قدرتمند WPF استفاده از Command ها براي هماهنگ سازي واکنش هاي مختلف کاربر و هماهنگ سازي قسمت هاي مختلف برنامه به کار مي رود که در جاي خود، مفصلا به شرح آن خواهم پرداخت. فعلا به همين قدر بسنده کنم که با يادگيري و استفاده از اين ابزار، فوق العاده شگفت زده خواهيد شدد و خواهيد ديد که برنامه هاي شما با اين ابزار به چه درصد بالايي از کارايي خواهد رسيد.

برنامه هاي بر پايه صفحه : کمي پيش تر در اين مورد صحبت کردم و نمونه عکس برنامه اي را هم که از صفحات استفاده شده بود را مشاهده کرديد. در موقعيت مناسب تري بر روي اين نوع برنامه نويسي نيز تمرکز بيشتري خواهيم کرد.

ايجاد واسط کاربر به صورت توصيفي

زماني که نامي از تکنولوژي WPF برده ميشود، در ادامه آن نامي هم از XAML مي آيد. XAML که يک زبان توصيفي و XML Based مي باشد، توسط ويژوال استوديو به کار گرفته مي شود تا شما بتوانيد فرم ها و عناصر خود را با سرعت بيشتري ايجاد نماييد. به جرات مي توانم بگويم که استفاده از XAML در سرعت توليد برنامه هاي شما، تاثير چشمگيري خواهد داشت. در ابتدا ممکن است در استفاده از آن کمي دچار سردرگمي شويد، تا آن جايي که بخواهيد آن را رها کنيد و اقدام به ايجاد محيط واسط برنامه خود با کد نماييد. اما با کمي تلاش و مسلط شدن بر آن ، لز کار کردن با آن لذت خواهيد برد، تا جايي که هيچ وقت دوست نداريد ديگر سراغ کد نويسي برويد!!! ( البته اين يه امر محال خواهد. چون حتما نياز به کدنويسي هم خواهيد داشت)

عدم وابستگي WPF به رزولوشن

بدون شک يکي از جنبه هاي فوق العاده مفيد و قوي WPF عدم وابستگي آن به رزولوشن صفحه نمايش است. اگر به خاط داشته باشيد، کمي پيش در يک نکته مهم، اين موضوع را يادآور شدم که يک برنامه نويس حرفه اي در WPF حتي المقدور از خواص Width و Height عناصر براي چيدمان آن ها استفاده نخواهد کرد. دليل اين گفته را در ادامه متوجه خواهيد شد.

برنامه هاي تحت ويندوزي که تا کنون و با تکنولوژي هاي موجود نوشته مي شدند( مي شوند) وابستگي زيادي به رزولوشن صفحه نمايش دارند. يه عنوان مثال فرم هاي شما، که در صفحه نمايش شما با رزولوشن 1024 * 768 به خوبي طراحي شده اند، ممکن است در يک کامپيوتر ديگري با رزولوشن بالاتر از ان (اين امر در Laptop ها بسيار معمول مي باشد. علاوه بر اينکه ان ها در بيشتر مواقع از تراکم 120 DPI استفاده مي کنند. در صورتي که مونيتور هاي CRT معمولا از تراکم 96 DPI استفاده مي کنند. "گر چه قابل تغيير مي باشد" ) کوچک شود، و بر عکس، در يک سيستم با رزولوشن پايين، قسمتي از فرم هاي شما از صفحه نمايش خارج گردد.

اما با WPF اين مشکلات مرتفع مي گردد. دليل آن هم استفاده از سيستم خاصي براي اندازه گيري اجزاء و عناصر برنامه شما، مي باشد. عناصر، اعم از دکمه ها، فرم ها و هر شي قابل اندازه گيري با واحدي با نام DIU (Device Independent Unit ) اندازه گيري مي شوند. هر يک DIU معادل با 1/96 (1 تقسيم بر 96) هر اينچ مي باشد. در واقع مي توان گفت هر DIU در صفحه نمايشي با تراکم پيکسل استاندارد يعني 96 DPI ، دقيقا برابر با 1 پيکسل فيزيکي در صفحه نمايش مي باشد. حال اگر از DPI بالاتري استفاده گردد، طبيعتا هر يک DIU (در همان رزولوشن قبلي)کمتر از 1 پيکسل خواهد شد( چرا؟)

حال WPF با اندازه گيري DPI در هر رزولوشني که با فرمول مشخصي محاسبه مي شود، مي توانيد سايز مناسب عناصر شما را محاسبه کند. اين روش باعث مي شود که نمايش يک کنترل مانند Button در رزولوشن 1024*786 و با 96 DPI تراکم، با نمايش آن در رزولوشن 1600*1200 و با تراکم 120 DPI يکسان باشد.

حال بايد دليل اينکه چرا نبايد حتي الامکان عرض و ارتفاع کنترل ها را به صورت مطلق و دستي تعيين کرد را متوجه شده باشيد. (چرا؟)

معماري WPF

تکنولوژي WPF يک تکنولوژي چند لايه مي باشد. در بالاترين لايه آن اسمبلي هاي پايه اي و اساي WPF قرا گرفته اند که تماما به صورت کد هاي مديريت شده سي شارپ مي باشند. اين لايه شامل API هاي PresentationFramework.dll ، WindowsBase.dll و PresentationCore.dll مي باشد که در واقع برنامه شما با اين اسمبلي ها ارتباط خواهد داشت.

در لايه زير آن، کامپوننت مديريت نشده milcore.dll قرار دارد. تمامي کدهاي نوشته شده توسط شما، از طريق لايه اول و ارتباط لايه اول با لايه دوم و کامپوننت مذکور تبديل آبجکت هاي مورد نظر مي گردد.
در واقع دليل اينکه کامپوننت milcore.dll به صورت مديريت نشده مي باشد، اين است که اين کامپوننت بايستي ارتباط تنگاتنگي و مجتمع شده اي با Direct3D داشته باشد و نيز داراي کارايي بسيار بالايي از هر لحاظي باشد.

Direct3D در لايه زيرين milcore.dll قرار گرفته است که به صورت يک API سطح پايين مي باشد و در واقع به نوعي موتور WPF به همراه milcore نيز به حساب مي آيد.

در شکل زير بخش هاي مختلف معماري WPF نشان داده شده اند:

همانطور که گفته شد، برنامه شما در بالاترين سطح با API هاي سطح بالا که در واقع پايه واساس WPF را تشکيل مي دهند، ارتباط بر قرار مي کنند. در ادامه به تشريح هر يک از اين کامپوننت ها و ابزار ها خواهم پرداخت.

PresentationFramework.dll : اين اسمبلي در واقع تمامي آبجکت هاي سطحه بالا و در واقع به نوعي بالاترين سطح از آبجکت هاي WPF مانند Windows ها ( که بالاترين سطح در برنامه هاي WPF را در مدل برنامه نويسي WPFApplication دارا مي باشد) و Panel ها که از ديگر اجزاء اساسي برنامه هاي WPF مي باشند،را نگه داري مي کند.

مي توانيد Windows ها را به مانند Form ها در برنامه هاي معمولي در نظر بگيريد. همچنين Panel، کلاس پايه براي تمامي کنترل هاي Container از جمله Grid ( که مهمترين آن ها و پر کاربرد ترين آن ها مي باشد)، StackPanel، Canvas و ... مي باشد.

Presentationcore.dll : شامل نوع هاي پايه از جمله UIElement و Visual مي باشد که تمامي اشکال و کنترل هاي از اين کلاس ها ارث بري مي کنند. در قسمت بعدي نمودارسلسله مراتبي کلاس هاي WPF را مشاهده خواهيد کرد.

Milcore.dll : در واقع هسته اصلي WPF در رندر کردن آبجکت ها به آبجکت هايي که لايه زيرين خودش يعني Direct3D نياز دارد، مي باشد. علاوه بر اين در ويندوز ويستا، مدير پنجره هاي دسکتاپ يعني Desktop Windows manager ( که عمل مديريت پنجره هاي دسکتاب را بر عهده دارد) از همين کامپوننت استفاده مي کند. در واقع شما مي توانيد با فراخواني DWM ، به فرم ها، يا صحيح تر بگويم به پنجره هاي برنامه خود، افکت هايي که پنجره هاي ويندوز ويستا دارا هستند را اضافه نماييد.

نکته: دقت کنيد که اين افکت ها بر روي ويندوز ويستا به تنهايي قابل پياده سازي هستند. گرچه ابزار ها و کامپوننت هاي Cross نيز براي اين کار نوشته شده اند و لي به صورت عادي برنامه هايي که بر روي ويندوز ويستا اجرا مي شوند، مي توانند قابليت افکت هاي ويندوز ويستا را دارا باشند.

WindowsCodec.dll : يک API سطح پايين مي باشد که قابليت اعمال، کارهاي زيادي را بر روي عکس ها، از قبيل بزرگ نمايي، چرخش و .. را دارد.
Direct3D : نيز يک API سطح پايين است که شامل تمامي گرافيک هاي رندر شده در WPF مي باشد.

ساختار سلسله مراتبي آبجکت ها در WPF

شکل زير ساختار سلسله مراتبي آبجکت هاي مختلف را در تکنولوژي WPF نشان مي دهد.

به عنوان مثال کلاس Button را در نظر بگيريد:
اين کلاس در اولين سطح از کلاس ButtonBase ارث بري مي کند و به ترتيب از کلاس هاي زير ارث بري کرده تا نهايتا به کلاس DispatcherObject برسد.

DispatcherObject
.
.
DependencyObject
.
.
Visual
.
.
UIElement
.
.
FrameWorkElement
.
.
Control
.
.
ContentControl
.
.
ButtonBase
.
.
Button
 

ترتيب ارث بري ها از پايين به بالا مي باشد.
بسياري از اين کلاس ها را در بخش هاي آتي شرح خواهم داد. اما مي توانيد جهت اطلاعات بيشتر به کتاب Prof WPF in C# 2008 نوشته Matthew macDonald ، صفحه 50 مراجعه کنيد.

 

با اين قسمت، بخش اول، يعني مقدمه اي بر WPF پايان مي پذيرد. از پست هاي بعدي، بخش دوم، که مربوط به تشريح XAML مي باشد، شروع خواهد شد.

ادامه دارد...

  کیفیت مقاله ارائه شده از نظر شما   
برای دادن رتبه به این مقاله می بایست Login کرده باشید.
  درباره نویسنده
مهدی کیانی
همه مقاله های نوشته شده توسط این کاربر (۴)
 
  پیام جدید
صفحه ۱ - پیامهای اصلی ۱ تا ۲ از مجموع ۲ پیام اصلی
اولین قبلی بعدی

 عنوان فرستنده تاریخ
 
Updated WPFPerf Performance Profiling Tools for WPF مجید شهاب فر ۱۳۸۷/۸/۱۹
 
نقد و بررسی ابوالفضل حسن الدين ۱۳۸۷/۸/۱۹
اولین قبلی بعدی

Copyright © 2006 - 2016 All Rights Reserved.
Please direct your questions or comments to