PDA

نسخه کامل مشاهده نسخه کامل : جایگزین MDI در WPF



Payman_62
12-07-2013, 13:07
سلام.
حتما میدونید که در WPF امکان ایجاد فرم MDI حذف شده.
برای حل این مساله بعضی شرکت ها کامپوننت ایجاد MDI در WPF رو عرضه کردن. مشابه این کامپوننت ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) یا این کامپوننت ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]).

اما ظاهرا خود ماکروسافت ترجیح میده دیگه از فرم های MDI در نرم افزار ها استفاده نشه. بعضی ها استفاده از Tab Control یا حتی Tree View رو برای دسته بندی و نمایش فرم ها توصیه میکنن.

با توجه به این که استایل نرم افزارها و سایت ها داره به سمت استایل ویندوز 8 پیش میره آیا این استایل رو برای نرم افزار های ایرانی مانند اتوماسیون اداری یا برنامه حسابداری مناسب میدونید؟

به نظر شما در نهایت بهترین جایگزین برای MDI برای نرم افزارهای ایرانی چیه؟

Msba
12-07-2013, 16:07
از نظر من MDI مناسب نیست.( همچین باهاش حال نکردم و نمی کنم:n01:)
خودتان که همه ی پاسخ ها را دادید بزرگوار.
اما از نظر من:
1- مشخص شده است (برای من) که اکثر کاربران تنها در یک زمان فقط از یک فرم درونی استفاده می کنند. در نتیجه اگر ما یک استایل ساده داشته باشیم که کاربر هر وقت خواست یکی را باز کند بهتر باشد تا اینکه یک محیط فراهم کنیم که بتوان فرم های مختلف را قرار داد و مدیریت کرد.
2- اگر نرم افزار های فروشگاهی و یا موارد دیگر باشند که اپراتور ترجیح می دهد از رابط لمسی استفاده کند حالا راه حل برنامه نویس چیست، مطمئنا هر رابطی بگذارد MDI نیست. چرا که باید کلید ها بزرگ باشد و بتوان عناصر را راحت Drag کرد، آیا Title یک MDI را می توان با اثر لمس جا به جا کرد؟ آیا این نما برای این دسته از کاربران مفید است؟ آیا رابط کاربری Touch آنقدر قوی هست که بتوان بین پنجره ها حرکت کرد؟ یا اینکه کاربر یکی را بازکند و یکی را ببندد؟
اگر نرم افزار دارای بخش های زیادی باشد و کاربر گاها احتیاج به باز کردن چند بخش از برنامه به صورت همزمان باشد( مانند سیستم های مبتنی بر انبار) استفاده از پن های کناری مفید تر است. البته این نظر کاملا شخصی است اما این رابط می تواند جایگزینی برای MDI باشد.
2.1-اخود مایکروسافت نیز به طور مثال Manage که از رابط های MMC است را تغییرات داده است. با قرار دادن حدود 3 داک برای مطالب و یک درخت می توان بین تمامی مطالب سوییچ نمود. در صورتی که در MMC های قدیم اینگونه نبود.
3- از نظر حجم استفاده از حافظه MDI ها بسته به برنامه نویسی میتوانند فضای بیشتری مصرف کنند. البته عکس آن نیز صادق است اما در هر دو مورد برنامه نویس باید هشیار باشد.
4- بیان شما مبنی بر اینکه می گویید: "مایکروسافت ترجیح می دهد" نشان دهنده ی آن است که یا این رایط یا یک ضعف کد محور و یا یک ضعف مدیریت محور در سیستم عامل و یا یک ضعف دیگر دارد که به علت مسائل تجاری از گفتن آن خودداری می کند.
5- یک ریبون و یک NavigationPane متحرک که به طور مثال در کمپوننت های DX و DeVcomponent موجود می باشند می توانند در کنار هم یک رابط زیبا بسازند این رفتار در outlook نیز دیده می شود.

البته همیشه باید بررسی کرد که عناصر چگونه هستند، ترتیب دسترسی ها به چه نحوی است.

موفق باشید.

senaps
12-07-2013, 19:04
سلام....
شخصا، فکر میکنم که ساختن گرید های تو در تو ( یا سایر کانتینر ها) بهتره...!!!
شما میتونی هر کانتینر رو نمایش بدید یا محو بکنین....
کاربر میتونه وسط پر کردن یکی از کانتینر ها، به یه کانتینر دیگه بره.... و برگرده... که ویندوز 8ی هم هستش تقریبا!!

یعنی شما یه سری دگمه میذاری هر کدوم یه کاری میکنه.... با کلیک روی هر کدوم، یه لایه‌ی کانتینر( مثلا یه گرید) فعال Show میشه که کل صفحه رو می‌پوشونه و یه دگمه‌ی کوچیک Back اون گوشه‌ی بالا میذارید برای Hide کردن این کانتینر( چیزی که کاربر می‌بینه، اینه که ظاهرا به صفحه‌ی قبلی برگشته!!!!!!)....

:n02:

من قبلا از Page ها استفاده میکردم، ولی حالا از لایه‌های روی هم کانتینر هایی مثل گرید استفاده میکنم که با Show و Hide کردنشون، کنترل کامل و خوبی بر روی صفحه ایجاد میشه برا ما...

البته بیشتر به UX مورد نظر شما ربط داره که چیکار بخواید بکنید! ...

_H2_
12-07-2013, 21:21
سلام
بدون شک لازم است که کاربر بتواند چندین سند را همزمان داخل برنامه بازداشته باشد...
ولی گمانم الگوی قدیمی که این پنجره های child آزادانه و بدون هیچ لنگری تکان میخوردند (و کوچک و بزرگ و خیلی میبخشید خودمانی میگویم در برنامه ولو بودند !) خیلی جالب نیست.
(همانطورکه میبینید کار بجایی رسیده که مایکروسافت خود فرم اصلی برنامه را هم در Win8-Metro فیکس کرده!!! حالا دیگر ما این را نادیده میگیریم)

الآن تقریباً MDI با الگوی Dock-Tab بندی شده خیلی رایج تر و راحت الاستفاده تر شد.
(مانند همان لینک هایی که از codeplex قرار دادید و خیلی زیبا بود)
ارجاع میدهم به بازکردن چندین فایل در خود محیط VS یا نسخه های جدید Photoshop یا مرورگرهای وب و...

این الوگی Dock-Tab بندی شده 1) حداکثر فضای نمایشگر را در اختیار فرم جاری قرار میدهد و نیز 2) امکان یافتن و سوییچ سریعی بین فرم های باز میدهد.

فکرش را همین VS یا IE برایمان پنجره هلای شناور کوچ و بزرگی داخل خودشان باز میکردند، در عمل با فقدان دو قاببلیت فوق چه میشد؟!

درنهاین برای منوهای دسترسی هم میتوان چیزی شبیه W8-StartMetro داشت و یا Ribbon شبیه Office تعبیه کرد که در حال حاضر خود مایکروسافت آن را ارائه داده.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و...



[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]


ما از همین الگوی Ribbon-Tab-Dock در یک برنامه حسابداری-انبارداری استفاده کردیم و نتیجه خوبی داشت.
(البته WinForm بود ولی از MDI استفاده نکردیم)

Payman_62
13-07-2013, 01:20
سلام.

ممنون از نظرات مفید دوستان.

کامپوننت Ribbon خیلی عالیه. به خصوص این که برای خود ماکروسافته و معتبره.
اما در هر حال ممکنه کاربر بخواد چندین پنجره رو باز کنه. به هر حال باید به یک شکلی این پنجره ها مدیریت بشن.
این امکان وجود داره که پنجره جدید رو داخل MainWindow Ribbon باز کرد؟

_H2_
13-07-2013, 18:58
سلام
Ribbon فقط جایگزین Menu های کلاکسیک قبلی است.
در واقع میتوان برای منوهای مادر یک ریبون گذاشت و برای زیر منوها از دکمه ها بزرگ زیبا در ریبون استفاده کرد.
(32*32 یا حداکثر 48*48 پیکسل است، مثل این دوست عزیز گرافیست شرکت ما فکر نکنید! تصویری که در کمتر از چاپ 10 متر رزولیشن خوبی نداشته باشد را بزرگ نمیدانست!)

برای فرم ها به همان الگوی Tab-Dock نیاز دارید.
البته این میتواند لزوماً خیلی هم پیچیده نباشد!
به این معنی که شاید بتوانید از TabControl استاندارد WPF برای مدیریت فرم هایتان استفاده کنید.
کافیست فرم های داخل برنامه تان UserControl باشند و با هر فرمان بازشدن فرم جدید (مثلآً ناشی از کلیک ریبون) بصورت داینامیک یک TabItem جدید اضافه کنید و UserControl را در آن میزبانی کنید...
(دکمه Close جهت حذف TabItem را هم میتوانید در TabItem.Header تعبیه کنید یا یک نوار باریک در بالای هر UserControl جهت "عنوان+دکمه" اضافه کنید و...)
این را که گفتم در حد آزمایشی انجام دادم...
یک TabControl ساده! مختصر و مفید!

درنهایت اگر برای Dock-Tab میخواهید امکانات بیشتری داشته باشید و خیلی هم خودتان را درگیر کدنویسی نکنید، بنظرم همان کنترلرهای رایگانی که پیداکردید، خیلی خوب و زیبا بنظر میرسند.