מיישרים קו עם WPF:



מיישרים קו עם WPF:

מבוא

בתחילת דרכו של .Net נחשפנו לטכנולוגיות חדשות רבות: דרך חדשה לפתח אתרים (), לגשת למסדי נתונים () ולשפות קשיחות-טיפוס (Strongly Typed) C# ו . לא פחותה בחשיבותה היא טכנולוגיית הWindows Forms, ספריית מחלקות לפיתוח אפליקציות חלונאיות.

Win Froms היא אכן שפה בשלה ומלאה, אך היא נסמכת באופן נוקשה על ה - API של Windows ליצירת ממשק משתמש. כתוצאה מכך, התאמה אישית של פקדים כגון: כפתורים, תיבות טקסט וכפתורי בחירה, כרוכה ביצירת פקד מותאם אישית. גרוע מכך, לכל פקד מוקצה איזור, וכך, לא מתאפשרת יצירת אפקטים המתפשטים לאיזורים של פקדים אחרים (כמו כפתור מואר ואנימציות).

Windows Presentation Fundation (WPF) משנה את התמונה. זאת באמצעות מודל חדש, המצייר את הפקדים מחדש, ומאפשר למפתחים לקסטם כל דבר, גם ללא שימוש בקוד.

מאפיינים אלו בנויים על תשתית חדשה, מבוססת DirectX, וה - hardware-accelerated graphics API המשמש לפיתוח משחקי מחשב מרהיבים. כתוצאה מכך, מתאפשרים אפקטיים גרפים שאינם פוגעים בביצועים, ואשר מאפשרים עבודה עם קבצי וידאו ותוכן תלת ממדי.

בנוסף ליכולות 'מנקרות העיניים' האלו, חשוב לשים לב לאפשרויות הנוספות, המאפשרות בניית ישומים שכיחים כמו ב Win Forms בעזרת מודל Data Binding משופר, מחלקות חדשות לטיפול בהדפסה, ותמיכה במסמכים רבי מלל, ועשירי טקסט. קיים גם מודל חדש לבניית ישומים מבוססי דפדפן ללא התראות האבטחה ותהליכי ההתקנה המוכרים.

WPF הוא פלטפורמת העתיד לפיתוח יישומים חלונאיים, אך יקח זמן עד שיחליף את Windows Forms, הנחשבת פלטפורמה בשלה יותר כיום. לכן הושקע רבות ביצירת שיתוף פעולה דו כיווני ביו שתי הטכנולוגיות הנ"ל.

במאמרים הקרובים, אסקור לעומק את מאפייני ה WPF, עבור מפתחי C#, בעלי רקע ב- Visual Studio:

חלק 1: הכרות עם WPF – ארכיטקטורה, 'צנרת' הDirectX ומערכת המדידה החדשה, שאינה תלוית מכונה.

חלק 2 : XAML – תקן להגדרת ממשק משתמש, וגישות שונות לפיתוח יישום בסיסי ב WPF.

חלק 3 : היישום – מודל ה-Application של WPF. כיצד מייצרים יישום Single-Instance ו Document-Base.

חלק 4 : פריסה – אסטרטגיות בארגון אלמנטים.

חלק 5 : תוכן – מיקום אלמנט בתוך אלמנטים אחרים להשגת קאסטומיזציה של פקדים נפוצים.

המאמרים מובאים ברצף שלדעתי מאפשר ביסוס הבנה מעמיקה של הנושא. קחו אויר, הדברים ה'עסייסים' יגיעו בהמשך.

על מנת ליישם את הדוגמאות במאמרים אלו נדרשת הגירסה השניה והחדשה של WPF, הכלולה ב .Net 3.5, Visual Studio 2008 או כלי גראפי כגון Expression Blend .

חלק 1 – הכרות עם WPF

WPF היא מערכת חדשה לפיתוח תצוגה ב - Windows. היא בנוייה עבור .Net ומושפעת מטכנולוגיות תצוגה קיימות כגון HTML , FLASH, ו- Hardware-Accelerated. ניתן לומר שהיא השינוי המשמעותי ביותר שחל בWindows מאז Windows 95.

כדי להעריך את השינוי הדרמטי יש להבין את הטכנולוגיות אשר שימשו מפתחים ב-15 השנים האחרונות:

• User32 – המספק את המראה המוכר של Windows (כפתור, תיבות טקסט וכו')

• GDI/GDI+ - המספק תמיכה בגרפיקה, אך במחיר פגיעה בביצועים.

כלים חדשים שפותחו עם השנים, הצליחו לפשט את העבודה עם טכנולוגיות אלו, אך למעשה, שימשו כמעטפת החוסכת מורכבות, וכתיבת קוד, שאינה פורצת את המגבלות היסודיות, המאפיינות מערכת שפותחה לפני יותר מעשור.

אחת הדרכים לעקיפת מגבלות אלו הייתה השימוש ב- DicrectX. ערכת כלי פיתוח שנוצרה ע"י מיקרוסופט במטרה ליצור משחקים מהירים ומרשימים על פלטפורמת Windows. כתוצאה מ API מסובך, DirectX לא שימש כמעט מעולם לפיתוח תוכנות עסקיות.

כיום, המנוע הגרפי עליו מבוסס WPF, הוא DirectX, דבר המאפשר גם לישומיים עסקיים 'שכיחים' להרוויח שימוש באפקטים עשירים, כגון שקיפות והחלקת עקומות (Antialiasing), ולהנות מהיעילות שבהעברת העבודה לGPU (Graphics Processing Unit- מעבד השייך לכרטיס הוידאו) ושמירת הCPU פנוי לעבודות אחרות.

ביצועיו של WPF טובים יותר תחת ויסטה (אפקט החלקת העקומות עבור תלת ממד נתמך רק בויסטה, ואילו אותו אפקט נתמך עבור צורות דו ממדיות, ללא קשר למערכת ההפעלה). WPF מרוויח גם ממנהל ההתקן (WDDM ) של ויסטה המציע חידושים כגון: ביצוע פעולות GPU מרובות במקביל, והעברת זיכרון מכרטיס הוידאו לזיכרון המערכת במקרה של חריגה.

תשתיות WPF מבצעות הערכה של כרטיס הוידאו המקומי ומדרגות אותו בין 0-2. המפתח אינו נדרש לדאוג לפרטי החומרה. האופטימיזציות מתבצעות, במידת האפשר, ע"י WPF. כמובן שכדאי לזכור שמחשבים עם כרטיס וידאו ישן ילקו בביצועים איטיים יותר, ולקחת זאת בחשבון בזמן הפיתוח.

להעמקה בנושא מומלץ לקרוא את מאמרו של אוהד: שיפור ביצועים – באפליקציות WPF

אז מה מציע לנו WPF?

• מודל פריסה דמוי WEB – בניגוד למיקום פקדים לפי קואורדינטות קבועות, מציע WPF פריסה גמישה ואדפטיבית, המאפשרת עבודה עם תוכן דינאמי.

• מודל גרפיקה עשיר – בניגוד למודל מבוסס פיקסלים, ניתן להשתמש בגרפיקה וקטורית, שקיפות (גם בעבודה עם שכבות) ותמיכה בתלת ממד אמיתי.

• מודל טקסט עשיר מקודמיו - שילוב טקסט עם אלמנטים צפים, תמיכה בעמודות, מספורים, וזרימת טקסט חכמה. כמו כן, קיים כלי לתמיכה בהצגת מסמכים עתירי טקסט.

• אנימציה כחלק מסביבת העבודה – ניתן להגדיר אנימציות באופן דקלרטיבי (באמצעות XAML )

• תמיכה בסאונד ווידאו – אפשרות להריץ יותר ממדיה אחת במקביל ואף לשלב וידאו על גבי פקדים אחרים (לדוגמא הצגת סרטון על קוביית תלת ממד מסתובבת)

• סגנונות (Styles) ותבניות (Templates) – המאפשרים עיצוב אחיד וגמיש של כל פרט בתצוגה.

• פקודות (Commands) – בעזרתן יכולים מפתחים ליעל את ההפרדה שבין תהליך פונקציונלי לבין הגורם לתחילתו (ה – Trigger ).

• ממשק משתמש דקלרטיבי – ניתן להפריד את ממשק המשתמש מהקוד, באמצעות XAML ולהשתמש בכלים גרפיים מקצועיים לעריכתו.

• ישומים מבוססי עמודים – ניתן לבנות ישומיים דמויי דפדפן, המאפשרים נויווט נוח, ניהול History והרצתם ב IE ו-FireFox.

אי-תלות ברזולוציה

ביישומים חלונאיים מסורתיים, נאלצים מפתחים לשער מראש את הרזולוציה השכיחה ולפתח על פיה. הבעיה בולטת בעיקר במסכים החדשים בעלי DPI צפוף (Dot per Inch) היוצרים תצוגה קטנה ולא קריאה, במקום להרוויח מהיכולת להציג יותר פרטים בגודל מלא. WPF אינו סובל ממגבלות אלו, כיוון שהוא מייצר בעצמו את כל ממשק המשתמש (החל בצורות פשוטות וכלה בפקדים מורכבים). כך כפתור ברוחב 1 אינץ במסך שלך יכול להשאר באותו הרוחב על מסך בעל רזולוציה גבוהה יותר, הוא פשוט יכיל יותר פיקסלים.

כדי להעמיק בנושא יחידות המדידה של WPF ו DPI ניתן לקרוא את המאמר WPF : screen resolution independence מאת Olivier Dewit. חשוב להבין את הכח הטמון במנגנון זה, המאפשר פיתוח ממשקי משתמש ברי-הרחבה ואימוץ צורת החשיבה החדשה.

קיימות כיום שתי גרסאות של WPF

• WPF3.0 – הגירסה הראשונה ששוחררה יחד עם WCF ו WF אשר הרכיבו את .Net 3.0

• WPF3.5 – אשר שוחררה עם .Net 3.5, וכללה תיקונים קלים, שיפורים בביצוע ומספר מאפיינים חדשים:

o החידוש העקרי הוא שיתוף פעולה עם Visual Studio 2008 ו Design Time Support.

o תמיכה של FireFox ביישומי XBAP (יישומי WPF מבוססי דפדפן)

o תמיכה בData Binding עבור LINQ – הנושא יפורט במאמרים הבאים.

o תמיכה ב IDataErrorInfo – ממשק מרכזי בפיתוח אפליקציות למימוש מודל נתונים עשיר הכולל ולידציות מובנות.

o היכולת לשלב פקדים אינטרקטיביים (כמו כפתור) בתוך פקדי טקסט עשירים.

o מיקום אלמנט דו מימדי על משטח תלת מימדי תוך שמירה על אינטרקטיביות.

הארכיטקטורה של WPF

WPF משתמש בארכיטקטורה מרובת שכבות. השכבה העליונה יוצרת אינטרקציה עם סט שירותים שנכתבו ב C#, ומוסרת את העבודה המעשית של תרגום האובייקטים של .Net לרכיב נמוך יותר בשם MilCore.dll

• Wincodecs.dll – משמש כ API נמוך (Low Level) לעיבוד תמונות

• Direct3D – משמש כ API נמוך לרינדור גרפיקה

• User32 – משמש למפוי אובייקטים לתוכנות אך אינו משתתף בתהליך הרינדור.

כדי להבין לעומק את המחלקות של WPF כדאי לסקור בקצרה את ההיררכיה שעומדת מאוחריהן

(ניתן למצוא מידע על המחלקות באתר הMSDN באמצעות לחיצה על שם המחלקה)

System.Threading.DispatcherObject – אחראית על פיקוח ותיאום מודל התהליכים

System.Windows.DependencyObject – מעניקה מודל מאפיינים חדש וחשוב עליו נלמד בהמשך

System.Windows.Media.Visual - מגדיר כל אלמנט כאובייקט ויזואלי וחושף מאפיינים לשליטה באופן הציור שלו

System.Windows.UIElement - מוסיף תמיכה בפריסה, קלט, פוקוס, אירועים ופקודות

System.Windows.FrameworkElement - המחלקה האחחרונה בשרשרת שכל האלמנטים יורשים ממנה

System.Windows.Shapes.Shape – ממחלקה זו יורשות צורות הבסיס כגון מלבן, פוליגון, וקו

System.Windows.Controls.Control – ממחלקה זו יורשים האלמנטים האינטרקטיבים: תיבת טקסט, כפתור וכו.

הערה: ב Windows Forms כל פריט ויזואלי נקרא פקד (control) ואילו ב WPF כל פריט ויזואלי נקרא אלמנט. פקדים ב WPF הם אלמנטים אשר מגיבים למשתמש.

הפקדים בWPF מתחלקים ל3 קבוצות היורשות מ 3 מחלקות בסיס:

• ContentControl - פקדים המכילים פריט תוכן יחיד (החל מ- Lable הפשוט ועד Window)

היופי בפקדים אלו הוא היכולת להכיל פריטי תוכן מכל הסוגים (אפילו Layout Panel המכיל בעצמו תוכן נוסף.

(דמיינו כפתור המכיל בתוכו פס גלילה ותיבת טקסט)

• ItemsControl – פקדים המציגים אוסף של נתונים (כמו ListBox). במאמרי המשך נלמד כיצד להתמקצע בעבודה עם פקדים אלו.

• Controls.Panel – פקדים המכילים אלמטים רבים ומארגנים את פריסתם. הם הבסיס למודל הLayout של WPF. נלמד עליהם בהרחבה בהמשך.

Silverlight

כצפוי, WPF הינו טכנולוגיה מוכוונת Windows. לפיכך, ניתן להשתמש בה רק על מערכת הפעלה זו. הדבר נכון גם ליישומים מבוססים דפדפן (על אף התמיכה של FireFox). כדי לפנות לפלטפורמות נוספות, פותחה טכנולוגיה בשם Silverlight, הקיימת כיום בשתי גירסאות. Silverlight מכילה גירסה חלקית של WPF, המאפשרת פיתוח RIA (Rich Iternet Applications). אינפורמציה מקיפה בנושא מצוייה באתר .

המאמר הבא יציג את XAML, תקן ה-Markup המשלים את העקרונות שהוצגו עד כה.

חלק 2 – XAML

XAML (קיצור של Extensible Application Markup Language), היא שפת Markup שמטרתה לייצר אובייקטים של .Net

במסמכי XAML אנו מתארים את הפנלים, הכפתור והפקדים שירכיבו את ממשק המשתמש של היישום.

לאחר רכישת מיומנות בכתיבת XAML, אין צורך בהקלדה ידנית של קטעים ארוכים, אלא ניתן להעזר במחוללים שיעשו זאת עבורנו (Visual Studio למפתחים ו Expression Blend למעצבים. כלים אלו מאפשרים עבודה שיתופית על אותו הפרוייקט ועדכון מיידי אודות שינויים)

במאמר זה נסקור את הפרטים התחביריים של XAML ונכיר את מודל האובייקטים של WPF.

כדאי להקדיש זמן לתרגול על מנת לרכוש שליטה בפרטים הקטנים. כמו כן, ישנן פעולות שקל יותר לבצע באמצעות הקלדה ידנית של XAML.

ממשקי משתמש שקדמו ל- WPF

השאיפה להפרדת החלק הגרפי מהקוד המבצע אותו, בצורה שתאפשר למעצב הגרפי ולמפתח לעבוד על אותו אובייקט, איש איש בתחומו, אינה חדשה. הבעיה בטכנולוגיות כ Windows Forms הייתה שגם אם הפיתוח נעשה בצורה ויזואלית, ע"י גרירת פקדים, הרי שבפועל, מאחורי הקלעים נכתב קוד, ולמעצבים לא היו הכלים לערוך אותו, וכך, הם נאלצו ליצא את תוצריהם לביטמפ עבור המפתחים. לגישה זו חסרונות רבים: הביטמפס אינם מאפשרים אפקטים דינאמיים, אין דרך מהירה וגורפת להחיל שינוי על כל האלמנטים בבת אחת (כפי שניתן לעשות ב-CSS), הממשק הופך תלוי רזולוציה וחלק נכבד מלוגיקת הממשק צריך להתבצע בקוד. בנוסף, בתהליך הפיתוח נדרש המפתח לתרגם את העיצובים לקוד. לא תמיד מתאפשרת התאמה מלאה בין השניים ויש בכך כפילות. WPF פותר בעיה זו באמצעות XAML, ופותח אפשרויות רבות לשותפות בין מפתחים ומעצבים באמצעות כלים ממוקדי תכלית.

על מנת ליעל ביצועים, כחלק מתהליך ההידור, הופך WPF את קבצי הXAML לקבצי BAML (שהם ייצוג בינארי של XAML ). תהליך זה מתרחש מאוחרי הקלעים ואינו מעסיק את המפתח. עם זאת, קיימת אפשרות להשתמש בXAML מבלי להדר אותו, במידה ונרצה לעצב את ממשק המשתמש לפי אינפורמציה המגיעה בזמן אמת (כמו שליפת קטעי XAML ממסד נתונים). דוגמא לכך נראה בהמשך.

העקרונות הבסיסים של XAML :

• כל אלמנט מתמפה למחלקה עם שם זהה (האלמנט מנחה את WPF ליצור אובייקט Button)

• לרוב, אלמנטים מקוננים מסמלים הכלה (Button בתוך Grid יציג כפתור בתוך Grid)

• התכונות (Attributes) של אלמנט מתמפות למאפיינים (Properties) של המחלקה התואמת. במקרים בהם השימוש בAttributes אינו גמיש דיו, נשתמש בתחביר מיוחד של תגיות מקוננות.

כך נראה מסמך XAML חדש כפי שנוצר ע"י Visual Studio:

דוגמאת קוד 1-1

>/Window>

המסמך כולל שני אלמנטים: האלמנט הראשי – Window ו- Grid.

ניתן לראות כי האלמנט הראשון מכיל תכונות כגון: שם המחלקה, Namespaces (מופיעים בתור xmlns) גובה,רוחב וכותרת החלון.

שימוש ב –Namespaces

על מנת ש אלמנטים של XAML יוכלו להתרגם לאובייקטים של .Net יש להגדיר את הNameSpace בו הם מוגדרים. בכל מסמך WPF נראה את הNamespaces - הבאים:

• - מכיל את כל מחלקות הWPF, והפקדים. משמש כברירת המחדל.

• - מכיל הנחיות על אופן העיבוד שלXAML. על מנת לגשת למחלקות מNamespace זה, יש להוסיף תחילית “x:” לאלמנט ( )

ה – Code Behind Class

תפקיד תכונת ה-Class בשורה הראשונה ( ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download