This article is currently in the process of being translated into Persian (~99% done).
WPF vs. WinForms
در مقاله قبلی توضیح داده شد که WPF چیست و کمی هم در مورد WinForm ها صحبت کردیم.در این مقاله سعی خواهیم کرد به مقایسه این دو بپردازیم، چون درحالیکه کاربردهای مشابهی دارند اما تفاوت های خیلی زیادی هم دارند. اگر تا کنون با WinForm ها کار نکرده اید، و علی الخصوص اگر WFP اولین چارچوب کاری گرافیکی شماست، میتوانید از این مقاله صرف نظر کنید اما اگر تفاوت های این دو برای شما جذاب است، پس خواندن مقاله را از دست ندهید.
مهمترین تفاوت بین WinForms و WPF این است که WinForms صرفا لایه ای روی کنترلهای استاندارد ویندوز(مثلا TextBox) است. در حالیکه WPF از صفر ساخته شده و تقریبا در تمامی موارد مستقل از کنترلهای ویندوز است. ممکن است این تفاوت ناچیزی به نظر بیاید، اما در صورتی که با فریمورکی که وابسته به Win32/WinAPI باشد کار کرده باشید متوجه میشوید که در واقع اینطور نیست.
یک مثال خوب برای این مورد یک کلید (Button) که شامل یک عکس و متن باشد است. این المان یک کنترل استاندارد ویندوزی نیست، بنابراین WinForms به صورت پیشفرض این امکان را به شما نمی دهد. در واقع شما می بایست از یک کتابخانه 3rd party استفاده کنید یا تصویری را طراحی کنید که به جای Button از آن استفاده کنید. در WPF شما این امکان را دارید چرا که Button یک محدوده (border) است که می تواند هر چیزی را شامل شود و وضعیت های مختلفی (برای مثال: لمس کردن، اشاره کردن، کلیک کردن) را پشتیبانی می کند. Button در WPF همانند دیگر المان های آن Look-Less است. یعنی می تواند المان های مختلفی را در داخل خود شامل شود. شما به یک Button که شامل یک تصویر و عکس است نیاز دارید؟ تنها کافی است تصویر و متن خود را داخل این المان قرار دهید. تمام شد! با استاندارد WinForms شما به همین سادگی نمی توانید این انعطاف را در طراحی داشته باشید به همین دلیل بازار بزرگی برای پیاده سازی المان هایی مانند Button ها (که شامل تصویر و متن می شوند) وجود دارد.
ایراد این انعطاف پذیری این است که گاهی به تلاش بیشتری نیاز خواهید داشت تا به چیزی که در WinForms به آسانی پیاده میشود، دست پیدا کنید؛ زیرا هدف شما بر اساس سناریویی که در ذهن خودتان وجود دارد تشکیل شده است. حداقل این چیزی است که در ابتدا حس میکنید. زمانی، متوجه میشوید که در حال طراحی یک ListView متشکل از یک تصویر و متنهایی که منظم چینش شدهاند هستید؛ امری که در WinForm ها، ListViewItem در یک خط کد برای شما به ارمغان میآورد.
این تنها یک تفاوت بود؛ ولی وقتی که با WPF کار کنید، متوجه میشوید که در واقع دلیل اساسی وجود بسیاری از این تفاوتها این است: «WPF انجام دادن کارها به روش خودشان است؛ چه بخواهید و چه نخواهید». شما دیگر محدود به انجام دادن کارها از روشهای ویندوزی نیستید؛ درحالی که برای دست یافتن به این انعطاف پذیری، اگر فقط میخواهید امور را با روش(های) ویندوزی به جلو ببرید، به تلاش بیشتری نیاز خواهید داشت.
در ادامه لیستی از برتریهای کلیدی WPF و WinForms وجود دارد که به شما کمک میکند بهتر متوجه کاری که قرار است انجام دهید شوید:
مزیت های WPF
- جدیدتر است و با استانداردهای فعلی تطابق بیشتری دارد.
- ماکروسافت در حال استفاده از این فرم ورک در بسیاری از برنامه ها مثل Visual Studio است.
- انعطاف پذیرتر است، بنابراین میتوانید بدون این که مجبور به نوشتن یا خرید کنترلهای جدید باشید کارهای زیادی را انجام دهید.
- زمانی که شما نیاز به استفاده از کنترلهای جانبی داشته باشید، ممکن است نویسندگان (سایر توسعه دهندگان) این کنترلها بیشتر بر روی WPF تمرکز داشته باشند چون جدیدتر است.
- XAML باعث راحتتر شدن ایجاد و ویرایش رابط کاربری (GUI) شده و اجازه میدهد کار شما بین محیط طراحی (XAML) و برنامه نویسی (C#, VB.NET و غیره...) تقسیم گردد.
- امکان اتصال مستقیم منبع داده (Databinding)، که باعث جدایی شفاف تر دادهها و طراحی برنامه میشود.
- استفاده از شتابدهنده سخت افزاری در طراحی رابط کاربری (GUI) برای کارایی بهتر
- به شما اجازه میدهد محیط برنامه را برای سیستم ویندوز و تحت وب طراحی کنید.(Silverlight/XBAP)
مزیت های WinForm
- قدیمیتر است بنابراین افراد بیشتری با آن کار کردهاند و بیشتر بررسی شده است.
- در حال حاضر تعداد زیادی از کنترلهای جانبی برای آن وجود دارد که میتوانید به صورت رایگان و یا با پرداخت استفاده کنید.
- قسمت طراحی Visual Studio، حداقل در زمان نوشتن این متن، برای WinForms بهتر از WPF است. در حالی که برای طراحی در WPF باید بیشتر کارها را خودتان انجام دهید.
- Afar
- Afrikaans
- Albanian
- Arabic
- Bulgarian
- Catalan
- Chinese
- Croatian
- Czech
- Danish
- Dutch
- Finnish
- French
- German
- Gujarati
- Hebrew
- Hindi
- Hungarian
- Indonesian
- Italian
- Japanese
- Kannada
- Korean
- Lithuanian
- Macedonian
- Norwegian Bokmål
- Persian
- Polish
- Portuguese
- Romanian
- Russian
- Serbian
- Slovak
- Slovenian
- Spanish
- Swedish
- Tamil
- Thai
- Turkish
- Ukrainian
- Uzbek
- Vietnamese