آموزش WPF

آموزش WPF با زبان xaml و VB.Net و C#

آموزش WPF

آموزش WPF با زبان xaml و VB.Net و C#

مقدمه درباره WPF -

سلام به همه

این اولین مقاله درباره wpf می باشد. این وبلاگ برای آشنایی شما با قابلیتها و امکاناتی که برنامه های wpf (Application wpf) برای شما ایجاد می کند، ایجاد شده است. ما نیز تازه با wpf آشنا شده ایم . و همزمان مطالبی که در این باره یاد گرفته ایم در اختیار شما قرار خواهیم داد. لطفا نظرات خود را از ما دریغ نفرمایید.

برای شروع از مقالاتی که آقای مهدی کیانی در سایت barnamenevis.org  قرار دادند استفاده خواهیم کرد. متن زیر از مقالات ایشان می باشد

wpf چیست؟

WPF یا Windows Persentation Foundation یک سیستم نمایش گرافیکی کاملا جدید برای ویندوز می باشد. WPF که برای .NET طراحی شده است از تکنولوژی های مدرن نمایش همچون HTML و Flash  تاثیر گرفته است.این قابلیت یکی از اساسی ترین تغییرات در رابط کاربر (User Interface) از Windows 95 تا کنون می باشد.

برای اینکه بهتر تغییری که WPF نسبت به رابط کاربری عادی ویندوز دارد پی ببرید بهتر است نگاهی به گرافیک ویندوز بیندازیم.

یک برنامه استاندارد ویندوز متکی به دو روش عادی برای خلق رابط کاربری و ایجاد اشکال گرافیکی می باشند

·         المانهای آشنای ویندوز مانند button و textbox و ... که توسط User32 ایجاد می شود

·          کشیدن اشکال ، متنها و عکسها ،و اضافه کردن اشکال پیچیده غیر از کنترلهای معمول که توسط GDI/GDI+ ایجاد می شوند. (و اغلب جلوه ندارند)

در این سالها این دو تکنولوژی که قدمت 15 ساله دارند پایه و اساس نمایش در ویندوز بودند و با تغییر داخلی API آنها ، سطح نمایش نیز ارتقا پیدا می کرد. موقع برنامه نویسی با Visual Basic 6 یا C++ ایجاد یک رابط کاربری سفارشی بسیار پیچیده و زمان بر بود . برنامه های تحت .NET این پیچیدگی را کاستند اما باز ایجاد یک رابط کاربری شکیل و زیبا در بین برنامه های تحت ویندوز سخت بود. تا اینکه ماکروسافت همراه با نسخه Visaul Stdio 2005 یک تکنولوژی جدیدی به نام WPF به همگان معرفی کرد.

برنامه های WPF همانند گذشته از این دو تکنولوژی (User32 و GDI) برای نمایش اشکال  گرافیکی و رابط کاربری استفاده نمی کند بلکه ازموتور گرافیکی DirectX برای این منظور بهره می برد.

DirectX چیست؟

ماکروسافت برای رفع محدودیتهایی که در کتابخانه های User32 و GDI/GDI+ وجود داشت اقدام به خلق DirectX گرفت.

در واقع  DirectX به عنوان ابزاری که ساختن و اجرا کردن بازی روی پلتفرم ویندوز را فراهم می کند شروع به کار کرد. در DirectX سرعت فرمان دادن بالاتر رفته و همچنین ماکروسافت همکاری تنگاتنگی با فروشندگان کارتهای گرافیکی و رساندن DirectX به قابلیتهایی که سخت افزارهای شتاب دهنده گرافیکی برای رسم اشکال مختلف ، جلوه های ویژه همچون بخشهای شفاف و ترسیم اجسام سه بعدی لازم دارد را با آنها انجام می هد.

پس  از اولین نسخه آن که کمی بعد از Windows95 ارائه شد،سالها می گذرد و در این سالها کامل و کاملتر شده به طوری که جز جدانشدنی از ویندوز با پشتیبانی  از همه کارتهای گرافیکی مدرن گردیده است می توان با API برای DirectX برنامه نوشت و از آن استفاده کرد اما بسیار پیچیده می باشد و اغلب از آن در فرمهای سنتی windows Application استفاده نمی شود و فقط محدود به بازی ها و نرم افزارهای گرافیکی بود.

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

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 یکسان باشد.حال باید دلیل اینکه چرا نباید حتی الامکان عرض و ارتفاع کنترل ها را به صورت مطلق و دستی تعیین کرد را متوجه شده باشید.

نظرات 1 + ارسال نظر
ناهید پنج‌شنبه 21 مهر‌ماه سال 1390 ساعت 08:31 ب.ظ

سلام خوبید؟؟
من خیلی به اموزش wpf احتیاج دارم...میخوام که کمکم کنید...البته کتابهای به زبان انگلیسی استادمون بهمون داده و البته چون بحثش خیلی واسه من سخته ترجیح میدم بیشتر کار کنم ..اگه ممکنه و میتونید کمکم کنید ...یه ایمیل بزنید ..منم مطالبی که استادمون آموزش میدن با شما در میون میذارم

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد