در اولین روز هایی که تکنولوژی dot net پدیدار شد، مایکروسافت به طور ناگهانی طیف کاملی از فناوری های جدید را معرفی کرد. یک راه کامل برای نوشتن اپلیکیشن های وب وجود داشت (ASP.NET) ، یک راه کامل برای وصل شدن به انواع دیتابیس ها (ADO.NET)، دوزبان برنامه نویسی جدید(VB.NET & C#) و یک ابزار مدیریتی برای رانتایم. در میان این تکنولوژی ها، هنوز یک فناوری قدیمی وجود داشت و آن چیزی نبود جز Windows Forms که یک ابزار ساخت اینترفیس برای اپلیکیشن های ویندوز است که به عنوان یک فناوری ساخت اینترفیس برای روزگار ما، می توان آن را عقب افتاده دانست! اما با پدید آمدن WPF ورق برگشت و بازی عوض شد.
WPF یک تکنولوژی جدید ساخت و اجرای اینترفیس در برنامه های جدید ویندوز است که اولین بار با .net فریم ورک 3.5 و در ویندوز ویستا ارائه شد. اما حالا با نسخه 4 خود و به کمک ویندوز 7، آمده تا بازی را عوض کند. همين حالا هم نرم افزار هايي نظير فایرفاکس 4، اینترنت اکسپلورر 9 و ... از WPF براي ساخت اينترفيس هایشان استفاده مي نمایند. پس اگر شما هم به عنوان یک "توسعه دهنده" یا یک "کاربر علاقه مند به دانستن مبانی تکنولوژی های مختلف"؛ دوست دارید که به طور کاملی با قابلیت ها و امکانات مختلف WPF آشنا شوید؛ این مطلب مناسب شماست. پس آن را از دست ندهید. البته قبل از شروع به خواندن مطلب، توصیه می کنیم که مطلب بررسی دایرکت ایکس 11 را مطالعه کنید. چرا که به درک هر چه بهتر شما از این مقاله کمک خواهد کرد. البته فراموش نکنید که این یک مقاله تخصصی است.
اگر چه ویندوز فرم یک ابزار بزرگ و پرقابلیت است، تغییرات ضروری ای را که باید در سیستم ارتباط با سخت افزار خود اعمال می کرد؛ اعمال نکرده است و به طور کلی می توان آن را ابزاری دانست که در طی ده سال گذشته، دستخوش تغییر اساسی خاصی نشده. ویندوز فرم برای ساختن یک ظاهر بصری و یا استفاده از عناصر استاندارد رابط کاربری ویندوز – مانند : Button , Textbox , Checkbox – به طور قابل ملاحظه ای، متکی به API های کلاسیک ویندوز است. همین مساله در عمل باعث می شود که سفارشی سازی به طور بسیار ناقصی در اجزای رابط کاربری اعمال گردد. به طور کلی ویندوز فرم نمی تواند قابلیت های ترسیمی مدرن و پیشرفته را در اختیار شما قرار دهد و به محض این که کمی آن را از نظر عناصر گرافیکی غنی کنید؛ آنچنان کند و سنگین می شود که از کارتان منصرف می گردید.
اما حالا WPF یا Windows Presentation Foundation آمده تا همه چیز را عوض کند. مدلی که WPF برای مدیریت منابع سیستم و اجزای رابط کاربری از آن تبعیت می کند؛ کاملا با ویندوز فرم متفاوت است. در همین حال WPF شامل کنترل های استانداردی است که در ویندوز فرم هم دیده می شدند. پس علاوه بر امکانات قبلی، توسعه دهندگان می توانند به قابلیت های ترسیمی کاملا مدرن با استفاده از دایرکت ایکس دست پیدا کنند و به طور کلی یک ظاهر کاملا مدرن را برای برنامه های خود بسازند. نکته دیگر این است که در WPF، زیبایی در عین سرعت به کار برده شده است.
پایه و اساس WPF، زیر بنا و ساختار قدرتمندی است که بر اساس DirectX ساخته شده. API های شتاب دهنده گرافیک سخت افزاری که در بازی های کامپپیوتری هم استفاده گسترده ای دارد. معنی اش آن است که شما می توانید از افکت های گرافیکی غنی ای استفاده کنید. بدون آن که نگران کاهش عملکرد و فشار آمدن زیاد به پردازنده شوید. چرا که تمام این افکت ها روی پردازنده گرافیکی پردازش می شوند و GPU ها هم به دلیل معماری موازی در ساختارشان؛ بسیار سریع تر از پردازنده ها به شمار می روند. این همان نقطه ضعف بزرگ ویندوز فرم در برابر WPF می باشد.
در واقع شما می توانید حتی از قابلیت های پیشرفته تری هم استفاده کنید. مانند پشتیبانی از فایل های ویدئویی و محتوای سه بعدی! با استفاده از این قابلیت ها (و یک ابزار خوب برای طراحی) قادر خواهید بود که رابط های کاربری و افکت های بصری بسیار چشم نوازی بسازید. در حالی که هیچ کدام از این کار ها برای ویندوز فرم ممکن نبود.
در این میان، ویدئو ها – انیمیشن ها و امکانات 3 بعدی، توجه بیشتری را در WPF می طلبند. این مهم است که در یاد داشته باشید که شما می توانید از WPF برای ساخت ویندوز اپلیکیشن های عادی با کنترل های استاندارد و افکت های پیش فرض استفاده کنید. در واقع استفاده از کنترل های متداول ویندوز، به همان سادگی ویندوز فرم است. حتی بهتر از این، باید بدانید که WPF برای برنامه های تجاری، سازگاری بیشتری نسبت به ویندوز فرم دارد. یک سری از کلاس های مختلف هم برای محتوای پرینت شده و مدیریت صف های پرینت به وجود آمده اند که بسیار بهتر از نمونه های مشابه در ویندوز فرم هستند. در نهایت هم به امکانات جدیدی می رسیم که در پرونده ها به کار گرفته می شود و به وسیله این امکانات می توانید مقدارهای بزرگی از متن های با فرمت های مختلف را نمایش دهید. برنامه های کاربردی مبتنی بر وب هم، در WPF فضای باز تری برای زندگی دارند. اپلیکیشن های صفحه ای می توانند به طور یک پارچه با Intenet Exploler هماهنگ شوند و یا از یک وب سایت به طور مستقیم اجرا شوند. همه این ها بدون هشدار های امنیتی متداول و آزار دهنده؛ و در عین حال با امنیت کامل اجرا خواهند شد! البته امکان اجرای آن ها روی نسخه های جدید فایر فاکس هم محیاست.
به طور کلی، WPF بهترین های دنیای قدیمی توسعه دهندگان ویندوز را در کنار هم جمع کرده و با نو آوری های خود در زمینه درست کردن رابط های کاربری مدرن، با گرافیک غنی مخلوط کرده تا بتواند به نوبه خود بهترین تجربه ممکن را به شما بدهد. اگر چه تولید اپلیکیشن های مبتنی بر ویندوز فرم، تا سال ها ادامه خواهد یافت؛ اما توسعه دهندگانی که هنوز در اول راه قرار دارند یا توسعه دهندگانی که می خواهد رابط کاربری سریع و زیبایی را برای برنامه خود پدید آورند. حتما باید اول به WPF نگاه بیاندازند.
- مواد لازم برای استفاده از WPF
حالا باید به این سوال پاسخ دهیم که برای استفاده از WPF و همچنین توسعه دادن اپلیکیشن ها بر مبنای آن، به چه چیز هایی نیاز داریم؟ برای اجرای یک برنامه ی WPF، کامپیوتر شما باید مجهز به یکی از نسخه های ویندوز 7، ویستا یا XP Service Pack 2 باشد. همچنین به نسخه چهارم فریم ورک دات نت هم نیاز دارید. برای ساخت یک اپلیکیشن WPF 4 به نرم افزار Visual Studio 2010 نیاز دارید که .NET Framework 4 را هم داشته باشد.
یک گزینه دیگر برای شما این است که به جای استفاده از Visual Studio، از نرم افزار Expression Blend استفاده کنید که یک ابزار طراحی گرافیک محور می باشد. کاربرد این نرم افزار در ساخت و تست اپلیکیشن های WPF می باشد. به طور کلی، این نرم افزار برای طراحان گرافیکی ای در نظر گرفته شده که دوست دارند وقتشان را به درست کردن رابط های چشم نواز و جدی بگذرانند. اما ویژوال استودیو بیشتر برای برنامه نویس هایی مناسب است که می خواهد برنامه هایی با کد نویسی زیاد تولید کنند. این مقاله پیشفرض را بر این قرار داده که از ویژوال استودیو استفاده می نمایید. اما اگر دوست دارید که چیز های بیشتری در مورد Expression Blend یاد بگیرید، می توانید به عناوینی در همان زمینه که خوشبختانه کم هم نیستند؛ مراجعه فرمایید.
- سیر تکاملی گرافیک در ویندوز:
حالا وقت آن است که ببینیم: گرافیک و رابط کاربری ویندوز، از ابتدا تا به حال دستخوش چه تغییرات اساسی و مهمی شده است تا بتوانیم به قدرت واقعی WPF در زمینه پردازش گرافیکی پی ببریم.
بدون این که بدانیم، توسعه دهنده های ویندوز بیش از 15 سال بود که از یک تکنولوژی تقریبا ثابت برای برنامه های خود بهره می بردند، سخت است که بتوانیم از WPF قدر دانی کنیم. اپلیکیشن های استاندارد ویندوز، برای ساختن رابط کاربری خود متکی به دو قطعه ناقص و پیش پا افتاده از سیستم عامل ویندوز بودند. البته از 10 سال پیش تغییرات نسبتا خوبی در ویندوز فرم انجام شد، اما نمی توان آن ها را اساسی دانست.
• User32: این تکنولوژی همان ظاهر آشنای ویندوز را برای عناصری نظیر پنجره ها، دکمه ها، جعبه متن ها و... پدید می آورد.
• GDI/GDI+: این تکنولوژی از قابلیت های ترسیم و رندر سازی: اجسام، متن ها و تصاویر و ... پشتیبانی می کرد. بهای استفاده از آن پیچیدگی زیاد و کارایی ضعیف در برنامه ها بود.
در طول چند سال، هر دوی این تکنولوژی ها تصفیه شدند و API هایی که توسعه دهنده ها از آن ها برای تعامل با کاربر استفاده می کردند؛ به طرز چشمگیری تغییر نمودند. اما هنوز هم وقتی با چهارچوب دات نت و ویندوز فرم یا Visual Basic 6 یا کد های C++ مبتنی بر MFC کار می کردید؛ در پشت صحنه همان بخش های مذکور از سیستم عامل به کار گرفته می شدند. فریم ورک های جدید تر، پوشش بهتری را برای تعامل با User 32 و GDI/GDI+ عرضه کردند. این فریم ورک ها توانستند عملکرد و اثر کار را بهبود ببخشند و پیچیدگی کار را کاهش دهند. قابلیت های نمایش پیش از رندر (یا پیش از کامپایل) برنامه ها بهبود یافت و برای بسیاری از کار ها دیگر نیازی به کد نویسی نبود. اما مشکل بزرگتری وجود داشت. این فریم ورک ها هیچ وقت نمی توانستند محدودیت های اساسی کامپوننت های سیستم را که بیش از یک دهه پیش طراحی شده بودند؛ از بین ببرند.
- دایرکت ایکس: موتور گرافیکی جدید
مایکروسافت یک راه دیگر برای از بین بردن محدودیت های User 32 و GDI/GDI+ ارائه داد و آن چیزی نبود جز Direct X. دایرکت ایکس در ابتدا تبدیل به یک ابزار برای ساخت بازی ها روی پلتفرم ویندوز گردید. اولین تعهد دایرکت ایکس، سرعت بالا بود و به همین دلیل مایکروسافت همکاری های نزدیکی را با سازندگان کارت های گرافیک ترتیب داد تا بتواند شتاب دهنده سخت افزاری لازم را برای دایرکت ایکس به ارمغان آورد. چراکه یک شتاب دهنده سخت افزاری برای پردازش بافت های پیچیده، جلوه های ویژه و گرافیک های سه بعدی لازم و حیاتی بود.
بعد از چند سال از اولین معرفی دایرکت ایکس( که کمی بعد از عرضه ویندوز 95 اتفاق افتاد)، دایرکت ایکس تبدیل به یک پلتفرم بزرگ و عمده شد و حالا این فناوری تبدیل به یک بخش بزرگ از ویندوز شده است که می تواند تمام کارت های گرافیک مدرن را پشتیبانی کند. با تمام این ها API برنامه نویسی برای دایرکت ایکس، بیشتر برای توسعه دهنده های بازی مناسب بودو نه نرم افزار ها. به همین دلیل دایرکت ایکس هیچ وقت در اینترفیس برنامه های عمده و قدیمی تجاری مورد استفاده قرار نگرفت. (به جز برنامه های سه بعدی خاصی مانند 3ds Max و ...)
WPF تمام این ها را تغییر می دهد. در WPF زیربنای تکنولوژی گرافیکی، GDI/GDI+ نیست. به جای آن دایرکت ایکس به کار گرفته شده است. شایان ذکر است که در اپلیکیشن های دبلیو.پی.اف، مهم نیست می خواهید چه نوع رابط کاربری ای را ایجاد نمایید. در هر حال شما با دایرکت ایکس کار خواهید کرد! پس چه به طراحی های پیچیده سه بعدی مشغول باشید و چه به اختصاصی کردن دکمه ها و عوض کردن رنگ متن و ...، تمام کار های ترسیمی به دایرکت ایکس محول خواهند شد. در عمل، حتی اپلیکیشن های جهانی و تجاری هم می توانند از جلوه های غنی مانند شفافیت یا فیلتر های AA (Anti Aliasing) استفاده نمایند و بهره مند شدن از شتاب دهنده ی سخت افزاری هم که جای خود را دارد! به طور ساده می توانیم بگوییم که دایرکت ایکس تا هرچقدر که بتواند، سعی می کند عملیات پردازشی را با واحد پردازش گرافیکی (GPU) هماهنگ نماید. این کار علاوه بر آزاد کردن پردازنده برای کار های محاسباتی بیشتر و بهره برداری بهتر از منابع سیستمی، عملکردی خارق العاده در گرافیک نسبت به GDI/GDI+ نصیب شما می کند. چرا که کارت های گرافیک بسیار بسیار قوی تر از پردازنده ها هستند. ( به گفته خود اینتل: حدودا 14 برابر)
خوب است بدانید که دایرکت ایکس موثر ترین ای.پی.آی در پردازش گرافیکی است. چرا که عناصر سطح بالایی مانند تکسچر ها و Gradient را در بر می گیرد و به طور مستقیم روی کارت گرافیک پردازششان می کند. در حالی که GDI از این کار عاجز است. به همین دلیل GDI باید آن ها را به دستور العمل های پیکسل به پیکسل تبدیل کند که در کارت گرافیک های مدرن به صورت بسیار کندی مورد پردازش و رندر سازی قرار می گیرند.
اما یکی از کامپوننت هایی که همچنان در صحنه حضور دارد و فعالیت می کند(البته به طور محدود) User 32 می باشد. WPF هنوز هم برای برخی از سرویس ها متکی به این کامپوننت می باشد. کار هایی مانند اداره و مسیر یابی ورودی ها و طبقه بندی مکان اپلیکیشن ها و پنجره ها، از مواردی هستند که بدون User 32 قابل انجام نمی باشند.
- شتاب دهی سخت افزاری و WPF:
شما حتما می دانید که کارت های گرافیک در ویژگی های تخصصی رندر سازی و بهینه سازی با هم تفاوت بسیاری دارند. اما خوشبختانه، این برای WPF مشکلی به حساب نمی آید. چرا که WPF تقریبا همه ی کار ها را با تکیه بر محاسبات نرم افزاری و رابط های برنامه کاربردی (APIs) انجام می دهد. به همین دلیل نیازی نیست که به پشتیبانی داخلی از کارت گرافیک تکیه نماید.
البته یک استثنا در پشتیبانی نرم افزاری WPF وجود دارد. به دلیل ضرورت پشتیبانی از درایور های ساده و فقیرتر، یا اجرای برنامه ها در ویندوز ایکس پی، WPF امکانات Anti-aliasing سه بعدی را فقط در صورتی ارائه می کند که اپلیکیشن برروی ویندوز های ویستا یا 7 اجرا گردد و همچنین درایور کارت گرافیک شما از WDDM یا Windows Display Driver Model پشتیبانی کامل بنماید. این یعنی اگر شیء های سه بعدی روی یک کامپیوتر ویندوز ایکس پی نمایش داده شوند؛ به جای خط های صاف و هموار، شکل را با لبه های دندانه دار و تیز خواهید دید. اگر چه برای حالت 2 بعدی چنین مشکلی وجود ندارد و فرقی نمی کند که از چه سیستم عامل و چه نوع درایوری بهره ببرید.
داشتن یک کارت گرافیک "صرفا" پر قدرت، تضمین مطلقی برای عملکرد سریع شتاب دهنده سخت افزاری در WPF نمی باشد. چرا که نرم افزار هم نقش مهمی دارد. برای مثال: WPF نمی تواند برای کارت های گرافیکی که از درایور های منسوخ شده استفاده می کنند؛ شتاب دهنده سخت افزاری ارائه دهد. ( اگر از یک کارت قدیمی استفاده می کنید؛ احتمالا درایور های تاریخ گذشته، همان هایی هستند که در بسته کارت و درون یک سی.دی قرار دارند. بهتر است از اینترنت به دنبال درایور جدید برای کارت خود باشید) در مورد عملکرد هم باید گفت که WPF در ویندوز های ویستا یا 7 بسیار بهتر عمل می کند. چرا که می تواند از تمام مزیت های Windows Display Driver Model استفاده نماید. WDDM بهبود های مهم زیادی را نسبت به مدل درایور در ویندوز ایکس پی (که XPDM نام داشت)، عرضه می کند. یکی از مهمترین آنها این است که WDDM اجازه انجام شدن چندید عملیات در GPU را در یک زمان معین می دهد و به حافظه کارت گرافیکی هم اجازه می دهد که تبدیل به بخشی از حافظه نرمال سیستم شود تا اگر زمانی، برنامه نیاز به حافظه ای بیشتر از مقدار موجود در کارت گرافیک داشت؛ مشکلی پیش نیاید. به عبارت ديگر هر چه دایرکت ایکس بالاتر ، عملکرد بهتر!
به عنوان یک قاعده کلی، WPF چند مدل از شتاب دهنده های سخت افزاری را برای تمام درایور های WDDM و درایور های XPDM که بعد از ماه نوامبر سال 2004 ساخته شدند؛ ارائه می دهد. نوامبر 2004 همان زمانی بود که مایکروسافت راهنمایی های ساخت و توسعه درایور های جدید برای ویندوز را منتشر ساخت. البته طبیعی است که سطح ساپورت از هر یک از انواع درایور ها متفاوت باشد. زمانی که زیر ساخت WPF برای اولین بار پدید آمد؛ کارت گرافیک شما را ارزیابی می کرد و به آن نمره ای از صفر تا 2 می داد. که در قسمت WPF Tiers بیشتر درباره این ویژگی بحث خواهیم کرد.
یکی از قول هایی که WPF به توسعه دهندگان می دهد؛ این است که لازم نیست نگران مشخصات یک سخت افزار خاص روی سیستم کاربرانشان باشند. چرا که WPF برای این که بفهمد چه موقع بهینه ساز های سخت افزاری را استفاده کند، به اندازه کافی هوشمند هست. البته باید گفت که WPF برای همه چیز یک نرم افزار یدکی هم به همراه دارد. پس اگر یک اپلیکیشن WPF را روی کامپیوتری که از یک کارت گرافیک قدیمی استفاده می کند اجرا کنید، اینترفیس باز هم به همان حالتی مشاهده خواهد شد که آن را طراحی کرده بودید و مشکلات جا به جایی وجود ندارد. البته، ممکن است تعامل نرم افزار با کاربر، بسیار بسیار کندتر باشد. بنابراین اگر کامپیوتری را یافتید که از یک کارت گرافیک قدیمی بهره می برد، روی آن اپلیکیشن های غنی WPF اجرا ننمایید. مخصوصا آن دسته از نرم افزار هایی را که شامل ترکیبات پیچیده ای از انیمیشن ها و یا افکت های پیچیده گرافیکی هستند. گاهی ممکن است مجبور شوید که برای افزایش سازگاری نرم افزار خود با سخت افزار های قدیمی تر، کمی از افکت های پیچیده را کم کنید و ظاهر را کمی ساده تر بسازید. البته این بستگی به گروه مخاطبان شما خواهد داشت که معمولا از چه سیستم هایی با چه قدرتی استفاده می کنند و چه مقدار میتوان از شتاب دهنده های سخت افزاری، روی سیستم آن ها بهره گرفت.
- WPF Tiers
همانطور که گفته شد، کارت های گرافیک به طور قابل توجهی با یک دیگر فرق دارند. زمانی که WPF یک کارت گرافیک را ارزیابی می کند؛ و این کار را با در نظر گرفتن تعدادی از فاکتور ها انجام می دهد. مانند: مقدار حافظه رم کارت گرافیک، پشتیبانی از سایه زن های پیکسلی یا Pixel Shader (روال های داخلی کارت گرافیک که افکت هایی مثل شفافیت و ... را در هر پیکسل محاسبه و پردازش می کنند.) و همچنین سایه زن های راس ها یا Vertex Shader (روال های داخلی کارت گرافیک که مقادیر رئوس مثلث را محاسبه کرده و سایه زنی را بر حسب آن ها انجام می دهند)
بر مبنای این اطلاعات، WPF یک امتیاز بین 0 تا 2 به قدرت رندرینگ کارت گرافیک می دهد که شرح آن ها در زیر آمده است:
• Rendering Tier 0: کارت گرافیک هیچ شتاب دهنده ی سخت افزاری را ارائه نمی دهد و نسخه پشتیبانی شده دایرکت ایکس در آن، پایین تر از هفت است.
• Rendering Tier 1: کارت گرافیکی می تواند شتاب دهنده سخت افزاری را به طور نسبی ارائه کند. یعنی ورژن دایرکت ایکس پشتیبانی شده در آن بین 7 تا 9 است.
• Rendering Tier 2: از تمام قابلیت های شتاب دهنده سخت افزاری پشتیبانی می نماید. ورژن دایرکت ایکس پشتیبانی شده هم 9 یا بیشتر از آن است.
برخی اوقات شما ممکن است نیاز به بررسی قدرت رندرینگ کارت گرافیک داشته باشید. در این صورت شما می توانید به طور انتخابی، فعالیت های شدید گرافیکی را روی کارت های کم قدرت تر، غیر فعال نمایید. اما به علت جلوگیری از پیچیده شدن بیش از حد مطلب، وارد بحث های برنامه نویسی نخواهیم شد. پس منتظر شرح چگونگی انجام این کار نباشید. (اگر این برای شما مساله بسیار مهمی است، می توانید به من ایمیل بزنید) اما اگر هر اطلاعات بیشتری از درجه بندی های کارت های گرافیک نیاز داشتید، می توانید به این آدرس مراجعه نمایید.
- WPF: یک API سطح بالاتر
اگر تنها چیزی که WPF ارائه می داد یک شتاب دهنده سخت افزاری خوب از طریق دایرکت ایکس بود؛ تبدیل به یک بهبود قانع کننده در رابط کاربری ویندوز می شد. اما به هر حال درآن صورت نمی توانستیم این تکنولوژی را انقلابی بنامیم. اما خوشبختانه WPF یک سبد از انواع سرویس های سطح بالا را با خود به همراه دارد که برای برنامه نویسان بسیار به درد بخور هستند. لیست زیر مهم ترین ویژگی هایی را که WPF با خود و با هدف تغییر، به دنیای برنامه نویسی ویندوز آورده نشان می دهد. پس مطالعه آن را فراموش نکنید:
• مدل طرح بندی شبیه به وب: به جای ثابت کردن کنترل ها در محل هایی با مختصات ثابت، WPF روی طرح بندی روان و انعطاف پذیری تاکید دارد که کنترل ها را بر اساس محتوای آن ها رده بندی و تنظیم کند. نتیجه کار پدید آمدن یک رابط کاربری است که می تواند به طور کاملا بهینه خود را با نحوه های نمایش گوناگون و رزولوشن های مختلف تطبیق دهد و از زبان های مختلفی نیز پشتیبانی کند.
• مدل ترسیمی غنی: WPF به جای کار کردن با پیکسل ها و وادار کردن کارت گرافیکی به پردازش پیکسل به پیکسل؛ ترکیبی از شکل های هندسی اولیه را به صورت وکتور، به پردازنده گرافیکی می دهد. یعنی اشکال پایه، بلوک های متنی و سایر موارد تشکیل دهنده گرافیکی. همچنین شما به قابلیت های جدیدی دست پیدا خواهید کرد. مانند کنترل واقعی میزان شفافیت، قابلیت دسته بندی کردن لایه های چند گانه با شفافیت های مختلف و پشتیبانی بومی از اشکال سه بعدی.
• مدل متنی غنی تر: بعد از سال ها استفاده از مدل های معمولی و ساده ی متنی، حالا WPF امکان استفاده از مدل های متنی غنی و شکل دار را در هر کجای رابط کاربری فراهم کرده است. حتی می توانید متن را با لیست ها، حالت های نمایشی شناور و سایر اجزای رابط کاربری مخلوط کنید. اگر نیاز به نمایش مقادیر زیادی از متن دارید، می توانید از امکانات پیشرفته نمایش پرونده استفاده کنید. مانند ستون بندی، سطر بندی و Justify (هم سو کردن عمودی متن ها از هر دو جهت در پاراگراف ها) کردن متن ها به منظور نمایش بهتر.
• پشتیبانی عالی از انیمیشن، به عنوان یک مفهوم از برنامه نویسی: در WPF، نیازی نیست برای وادار کردن یک فرم بری تغییر دادن خودش و یا انیمیشن سازی، به تایمر متوسل شوید. به جای آن، انیمیشن به عنوان یک خصلت ذاتی در فریم ورک گنجانده شده است. شما می توانید با استفاده از برچسب های اعلانی (Declarative Tags) ، انیمیشن را تعریف کنید و به اجرا در آوردن آن را به عهده خود WPF بسپارید.
• پشتیبانی از محتوای صوتی و تصویری: ابزار های قبلی رابط کاربری مانند ویندوز فرم، به طرز شگفت آوری در استفاده از محتوای مولتی مدیا محدودیت ایجاد می کردند. اما WPF آماده است تا هر فایل صوتی یا تصویری ای که توسط ویندوز مدیا پلیر پشتیبانی میشود را اجرا کند. علاوه بر این به شما اجازه می دهد که در یک زمان واحد بتوانید بیش از یک فایل رسانه ای را پخش نمایید. و این که WPF به شما ابزار اجرای محتوای ویدئویی در سایر اجزای رابط کاربری را می دهد، باز هم به موثر تر شدن عملکرد آن در مولتی مدیا کمک می نماید. کار های عجیب و قریب زیادی هستند که می توانید با WPF انجام دهید. برای مثال پخش کردن یک فایل ویدئویی روی یک مکعب سه بعدی در حال چرخش!
• قابلیت استفاده از قالب ها و سَبک ها: سَبک ها اجازه استاندارد کردن قالب بندی برنامه و استفاده ی دوباره از آن در جای جای اپلیکیشن را می دهند. قالب ها هم به شما اجازه می دهند که خواص رندر سازی هر عنصری را که خواستید تغییر دهید. حتی کنترل های هسته ای ویندوز مانند Button ها. ساختن اینترفیس های مدرن در برنامه ها، هیچ گاه تا این حد آسان نبوده است.
• دستورات (Commands): بسیاری از کاربران به این نکته پی بردند که بین این که (برای مثال) فرمان Open را در منو بگذارند یا در نوار ابزار، فرقی وجود ندارد و نتیجه هر دو یکسان است. اما مساله این جا بود که برای پدید آوردن چند راه مختلف برای انجام یک کار واحد، می بایست کد نویسی بیشتری انجام می دادید. (البته امکان نسبت دادن یک سابروتین به چند کنترل مختلف هم وجود داشت اما با محدودیت و پیچیدگی رو به رو بود.) اما حالا WPF این امکان را به وجود آورده که یک دستور را در یک قسمت تعریف کنید و آن را به کنترل های دیگر لینک نمایید. به این صورت کار ها بسیار راحت تر خواهد شد.
• رابط کاربری اعلانی: اگر چه شما قادر خواهید بود که یک پنجره WPF را با کد نویسی کلاسیک درست کنید؛ اما ویژوال استدیو، اکنون راهی متفاوت را برای این کار در اختیار شما قرار می دهد. با سریال بندی هر محتوای خاص از یک پنجره در یک سری از تگ های XML، پرونده های XAML پدید آمده اند! مزیت XAML این است که رابط کاربری را به طور کامل از کد نویسی جدا می نماید. با این قابلیت، طراحان گرافیکی می توانند از ابزار های حرفه ای برای ویرایش فایل های XAML استفاده نمایند و خودشان مستقلا بخش ظاهری نرم افزار را طراحی نمایند. (یاد گرفتن XAML کار سختی نیست و با کمی مطالعه می توانید آن را یاد بگیرید. این زبان، در ساختار شباهت زیادی با زبان HTML دارد.)
• اپلیکیشن های مبتنی بر صفحه: با استفاده از WPF می توانید اپلیکیشن هایی مانند مرورگر ها را بسازید. اپلیکیشن هایی که به شما اجازه می دهند در میان مجموعه ای از صفحات گردش کنید. در ضمن امکان استفاده از دکمه های forward و back هم در آن ها وجود دارد. WPF می تواند داده ها را در قالب History صفحه مدیریت کند و شما حتی می توانید پروژه هایتان را به عنوان یک برنامه مبتنی بر مرورگر بسازید که به طور مستقیم در اینترنت اکسپلولر (یا حتی فایرفاکس) اجرا بشوند!
وقتی تمام موارد فوق، با هم در یک جا جمع می شوند، به شما امکان سفارشی سازی بسیار بالایی را می دهند. مثلا دو عکس زیر یک اینترفیس بسیار ساده را نشان می دهند. اما همین مقدار سفارشی سازی هم با استفاده از قابلیت های ترسیمی ویندوز فرم تقریبا غیر ممکن است. این یعنی شما در ویندوز فرم برای برقرار ساختن ظاهری شبیه این، باید از تصاویر مختلف کمک بگیرید که خودش بیانگر کم شدن کیفیت برنامه ها در صورت بزرگ شدن و قرار گرفتن در رزولوشن های بالاتر است! در صورتی که فقط با 2 دقیقه کارا در WPF ، به نتیجه زیر رسیدیم و هیچ مشکلی هم از نظر کیفیت مشاهده نمی گردد.
- ویندوز فرم زنده خواهد ماند:
WPF، پلتفرم آینده رابط کاربری اپلیکیشن های ویندوز است. اما به هیچ عنوان نمی تواند یک شبه جای ویندوز فرم را بگیرد. ویندوز فرم در موارد زیادی در اوج نسل "قبلی" تکنولوژی نمایشی قرار دارد. حتی با وجود این که از GDI/GDI+ و User32 برای ظاهر خود استفاده می کند.
اما سوال اصلی اینجاست که شما باید کدام پلتفرم را برای شروع به طراحی یک ویندوز اپلیکیشن جدید، انتخاب کنید. اگر شما هنوز به آشنایی کامل با ویندوز فرم نرسیدید و در ابتدای راه طراحی واسط کاربری قرار دارید؛ WPF می تواند یک انتخاب ایده آل برای شما باشد. چرا که بهترین چشم انداز را نسبت به بقیه گزینه ها دارد. در همین حال، اگر به امکاناتی نیاز دارید که WPF آن ها را ارائه می دهد؛ اما ویندوز فرم از استفاده آن ها عاجز است (مانند ترسیم سه بعدی یا اپلیکیشن های Page-Based)؛ حتی اگر کار را روی ویندوز فرم هم آموخته باشید، باید به WPF کوچ کنید. حالت دیگر این است که شما سرمایه گذاری قابل توجهی را روی اپلیکیشن های تجاری مبتنی بر ویندوز فرم انجام داده اید و در حال حاضر هیچ نیازی نیست که به WPF مهاجرت کنید. در این صورت می توانید اطمینان خاطر خود را حفظ نمایید. چرا که ویندوز فرم برای چند سال دیگر هم به طور مداوم پشتیبانی خواهد شد.
شاید بهترین بخش از داستان این باشد که مایکروسافت سرمایه گذاری و تلاش زیادی را به ایجاد لایه ای بین WPF و ویندوز فرم اختصاص داده است. این لایه می تواند در اپلیکیشن های ویندوز فرم، یک میزبان برای کنترل های WPF باشد و به طور بر عکس هم عمل نماید. پس در WPF هم شما امکان استفاده از کامپوننت های قدیمی COM را دارید.
- دایرکت ایکس هم زنده خواهد ماند!
یکی از زمینه هایی که WPF در آن چندان مناسب عمل نمی کند، ساختن گرافیک های پیچیده ی Real-Time (مانند شبیه ساز های پیچیده ی فیزیکی) و یا ساختن بازی های پیشرفته است. اگر می خواهید در این موارد بهترین عملکرد ویدئویی ممکن را داشته باشید، باید به طور سطح پایین تری برنامه نویسی کنید. یعنی برنامه نویسی مستقیم با دایرکت ایکس! می توانید به کتاب های مختلفی که در این رابط وجود دارد مراجعه کنید و همچنین کتابخانه های مدیریت شده ی دات نت برای دایرکت ایکس را از این آدرس دانلود نماييد.
در WPF 3.5 SP1 مایکروسافت شروع به از بین بردن مرز های دایرکت ایکس و WPF نمود. اکنون شما می توانید محتوایی را که با دایرکت ایکس نوشته شده، درون یک اپلیکیشن WPF جا سازی نمایید. در واقع شما می توانید کار های بسیار زیادی با آن انجام دهید. حتی این که به عنوان یک قلم استفاده اش کنید و برای رنگامیزی کنترل های WPF از آن کمک بگیرید! (قلموی سه بعدی) و خیلی کار های پیشرفته دیگر. اما این مباحث از محدوده این مقاله خارج هستند. می توانید در اين آدرس ، بیشتر در باره آن بیاموزید.
- سیلورلایت:
WPF هم یک تکنولوژی مرکزی ویندوز است. درست مثل فریم ورک .NET! معنی اش آن است که اپلیکیشن هایWPF فقط در کامپیوتر هایی اجرا می شود که از سیستم عامل ویندوز استفاده می کنند. حتی اپلیکیشن های مبتنی بر مرورگر (Browser-based) هم با محدودیت هایی این چنینی رو به رو هستند. پس فقط می توانند در ویندوز اجرا شوند اما خوبی آن ها در این است که هم از IE و هم از Fire Fox پشتیبانی می نمایند.
خوشبختانه یا بدبختانه، این محدودیت ها تغییری نخواهند کرد. چرا که بخشی از هدف مایکروسافت با WPF، این بوده که مزیت استفاده از قابلیت های غنی کامپیوتر های ویندوزی را با سرمایه گذاری اش در تکنولوژی هایی همچون دایرکت ایکس مخلوط کند تا یک تکنولوژی اختصاصی و نوآورانه برای پلتفرم خودش تولید نماید. اما نگران نباشید. سیلور لایت (Silverlight) به عنوان یک زیرمجموعه از WPF عمل می کند. می تواند در مرورگر های مدرن (مانند فایر فاکس، کروم، سافاری و ..) پشتیبانی شود و همچنین روی سیستم عامل های دیگر هم (مانند لینوکس و MAC OS X) اجرا گردد. سیلور لایت از جهاتی شبیه به فلش می باشد و برای توسعه دهندگان علاقه مند، طعمه واقعا لذیذی است.
از خیلی جنبه ها، می توان سیلور لایت را به عنوان یک زیر شاخه از WPF ارزیابی کرد که شامل خیلی از قرار داد های WPF می باشد. مانند زبان XAML و خیلی چیز های دیگر ... با این حال سیلور لایت از بعضی قابلیت های پیشرفته محروم است. مانند قابلیت استفاده از ترسیم سه بعدی و یا نمایش پرونده های غنی. شاید در نسخه های آینده سیلور لایت امکانات جدیدی گنجانده شود. اما امکانات پیچیده تر شاید هرگز اضافه نگردند.
گُل اصلی سیلور لایت این است که به رقیبی قدرتمند برای فلش از شرکت آدوبی تبدیل شود. با این همه، فلش یک مزیت کلیدی دارد: این که در سراسر وب استفاده می گردد و تقریبا روی هر کامپیوتری نصب است. با این حال مایکروسافت به منظور رساندن این تکنولوژی جوان را به جایگاهی قدرتمند؛ باید امکاناتی قدرتمندتر را در نسل های بعدی آن بگنجاند. مانند سازگاری بسیار بالاتر و همچنین امکانات بی نظیر برای طراحی! هر چند که باید اعلام کنیم در طول این مدت استقبال از سیلور لایت خوب نبوده و مایکروسافت هم دیگر آن جدیت سابق را روی آن اعمال نمی کند. اما بحث WPF کاملا با سیلور لایت متفاوت می باشد. به هر حال برای آموختن چیز های بیشتر درباره آن، می توانید به وب سایت Silverlight.net مراجعه نمایید.
- سخن آخر:
اگر این مقاله را با دقت و با حوصله خوانده باشید؛ با بسیاری از مبانی نسل بعدی اپلیکیشن های ویندوز آشنا شده اید. حال چه به عنوان توسعه دهنده قصد ادامه کار را دارید و چه به عنوان یک کاربر؛ می توانید از اطلاعات مفیدی که کسب کردید، نهایت استفاده را ببرید. شاید مهمترین مزیت آشنا شدن با WPF این است که بتوانیم اپلیکیشن هایی پایدارتر، سریع تر و زیبا تر برای سیستم عامل ویندوز تولید کنیم و خیلی از مشکلات اپلیکیشن های فعلی را از نظر عدم پایداری و سرعت مناسب ریشه یابی کنیم.
امیدوارم که از این مطلب استفاده کافی برده باشید. اگر نکته دیگری هست که در مورد مبانی WPF می دانید، می توانید در بخش نظرات با ما و دیگر کاربران در میان بگذارید.