HWzoneHWzoneHWzone
  • ראשי
  • כתבות פופולריות
  • הגדרת התראות
  • מחשבים
    מחשבים
    הצג עוד
    כתבות מובילות
    משטח משלוח של כרטיסי מסך יוקרתיים במחסן מטענים בנמל תעופה, עם אריזות חסרות וניילון עטיפה קרוע
    חצי מיליון דולר נעלמו בשדה התעופה: שני משטחים של RTX 5090 אבדו
    20/10/2026
    הדרך להפסיק לשלם ולקחת בעלות: בנינו שרת AI מפלצתי מקומי
    22/08/2026
    המחשה של מעבד נייד חסכוני המבוסס על מבנה שבבים קומפקטי, בהשראת ארכיטקטורת Moon Lake העתידית של אינטל
    אינטל מכינה את Moon Lake: ארבע ליבות ו-6 ואט בלבד
    29/10/2026
    כתבות אחרונות
    עד 33% יותר בגיימינג: ההימור החדש של אינטל עם Nova Lake
    31/10/2026
    סם אלטמן: ה-RAM במחשב שלכם מבזבז זכרון שיכל להיות בחוות שרתים
    31/10/2026
    RTX 5080 נעלם מחנות NVIDIA, והמחיר כבר עבר 2,000 דולר
    31/10/2026
    140 מיליארד דולר נמחקו משווי אינטל, וההשבתה בישראל עולה ביוקר
    31/10/2026
  • גאדגטים
    גאדגטים
    הצג עוד
    כתבות מובילות
    ניסיתי סמארטפון מתקפל בפעם הראשונה – התרשמויות משימוש Galaxy Z Fold8
    27/09/2026
    שחזור דיגיטלי של ה-iPod המקורי משנת 2001 מופיע בתוך דף אינטרנט במחשב נייד
    אפל מחזירה את ה-iPod המקורי לחיים, ומחביאה אותו באתר שלה
    25/10/2026
    הדמיה של מערכת הבית החכם החדשה של אפל עם מסך HomePad, רמקול HomePod mini ומזרים Apple TV 4K
    אפל חוזרת לסלון: שלושה מוצרים חדשים בדרך, כולל מסך חכם שיתחרה באמזון ובגוגל
    10/10/2026
    כתבות אחרונות
    סיכום השבוע: Gemini 4 Carbon, GeForce ועוד
    30/10/2026
    אמזון מציגה את התשובה שלה לגוגל ולאפל עם חמישה מכשירים חדשים
    29/10/2026
    אפל מחזירה את ה-iPod המקורי לחיים, ומחביאה אותו באתר שלה
    25/10/2026
    סיכום השבוע: Claude, GTA 6 ועוד
    23/10/2026
  • גיימינג
    גיימינג
    הצג עוד
    כתבות מובילות
    קונסולת PlayStation 5 לצד מסך המציג משחקי PC בתוך ממשק הקונסולה באמצעות Playden
    בלי מחשב ובלי סטרימינג: משחקי PC רצים ישירות על PlayStation 5
    27/10/2026
    המחשה של לוח אם בקונסולת משחקים עתידית עם שבבי זיכרון ואחסון חשופים
    ה-PlayStation 6 עשויה לעלות יותר מ-1,000 דולר
    20/10/2026
    GIGABYTE GAMING A16 עם RTX 5060 – מה תקבלו בקטגוריה הזולה של מחשבי גיימינג ניידים?
    12/09/2026
    כתבות אחרונות
    נטפליקס הופכת את PUBG לסדרה, ודונלד גלובר מקבל ארבעה תפקידים
    30/10/2026
    סיכום השבוע: Gemini 4 Carbon, GeForce ועוד
    30/10/2026
    הורדתם אמולטור PS5 מ-GitHub? כדאי שתבדקו מה באמת התקנתם
    29/10/2026
    GTA 6 עשוי לדרוש 210GB – כמעט שליש מהאחסון ב-PS5
    28/10/2026
  • טכנולוגיה
    טכנולוגיה
    הצג עוד
    כתבות מובילות
    Google's Gemini 4 Carbon Tops Every Other Model In All But Two Of Google's Benchmarks, Scoring 88.2 Percent On SEC-bench Pro Vulnerability Discovery
    גוגל מציגה את Gemini 4 Carbon: ראשון בדירוג, סגור לציבור
    29/10/2026
    מודל 44 טריליון הדולר של אנתרופיק: כשהמתכנתים יפנו את מקומם לחשמלאים
    14/09/2026
    לווייני תקשורת של Starlink מעל רשת סלולרית עירונית עם אנטנות קרקעיות וסמארטפון המחובר לרשת
    מאסק בונה חברת סלולר עם 15 אלף לוויינים ואנטנות קרקעיות
    11/10/2026
    כתבות אחרונות
    אנת'רופיק חוסמת שכפול משחקים ב-Claude, ומפתחים כבר נפגעים
    01/11/2026
    בתוך 20 דקות: האקרים רוקנו מיליארדי דולרים מארנקי Binance
    30/10/2026
    גוגל איבדה כמעט 500 מיליארד דולר ביום מסחר אחד
    30/10/2026
    סוף לגלישה החופשית? Reddit מתכננת לחייב משתמשים להירשם
    30/10/2026
  • ביקורות
    ביקורות
    הצג עוד
    כתבות מובילות
    הדרך להפסיק לשלם ולקחת בעלות: בנינו שרת AI מפלצתי מקומי
    22/08/2026
    ניסיתי סמארטפון מתקפל בפעם הראשונה – התרשמויות משימוש Galaxy Z Fold8
    27/09/2026
    מחשב ASUS Ascent GX10 מבוסס NVIDIA DGX Spark בסקירה: דמוקרטיזציה של מודלים מקומיים
    04/10/2026
    כתבות אחרונות
    מחשב ASUS Ascent GX10 מבוסס NVIDIA DGX Spark בסקירה: דמוקרטיזציה של מודלים מקומיים
    04/10/2026
    ניסיתי סמארטפון מתקפל בפעם הראשונה – התרשמויות משימוש Galaxy Z Fold8
    27/09/2026
    GIGABYTE GAMING A16 עם RTX 5060 – מה תקבלו בקטגוריה הזולה של מחשבי גיימינג ניידים?
    12/09/2026
    זיכרון Novakey של ADATA XPG – אסתטיקת ה-Cyberpunk של ה-DDR5
    07/09/2026
  • ספיישלים
    • CES
      • CES 2026
      • CES 2025
      • CES 2024
      • CES 2023
      • CES 2022
      • CES 2020
      • CES 2019
      • CES 2018
      • CES 2017
      • CES 2016
      • CES 2015
      • CES 2013
      • CES 2012
      • CES 2011
      • CES 2009
    • Computex
      • Computex 2019
      • Computex 2018
      • Computex 2016
      • Computex 2014
      • Computex 2013
      • Computex 2012
      • Computex 2011
      • Computex 2010
      • Computex 2009
      • Computex 2008
      • Computex 2007
    • E3 2016
    • עשור לאתר המחשבים
    • CeBIT 2008
    • CeBIT 2007
  • פורומים
  • זכרונות
  • הפיד שלי
  • ניהול העדפות
  • ערוצים פרסומיים
עקבו אחרינו ברשתות
  • אודות האתר
  • צרו קשר
  • פרסם אצלנו
  • תנאי שימוש ומדיניות פרטיות
  • הצהרת נגישות
בקריאה עכשיו: התנהגויות ב-WPF
HWzoneHWzone
  • ראשי
  • כתבות פופולריות
  • הגדרת התראות
  • מחשבים
  • גאדגטים
  • גיימינג
  • טכנולוגיה
  • ביקורות
  • ספיישלים
    • CES
    • Computex
    • E3 2016
    • עשור לאתר המחשבים
    • CeBIT 2008
    • CeBIT 2007
  • פורומים
  • זכרונות
עקבו אחרינו
  • אודות האתר
  • צרו קשר
  • פרסם אצלנו
  • תנאי שימוש ומדיניות פרטיות
  • הצהרת נגישות

התנהגויות ב-WPF

עדכון אחרון: 24/12/2016 בשעה 22:53
צוות האתר
30/12/2010
12 דקות קריאה
שיתוף
רוצים לראות יותר מ-HWzone בתוצאות של Google?הוסיפו אותנו כמקור מועדף ב-Google
הכרות עם התנהגויות

התנהגות, או Behavior בלעז, הוא קונספט חדש יחסית ב-Silverlight ו-WPF, אך מאוד מוצלח. הרעיון הוא לממש יכולות מסויימות (התנהגות) באובייקט נפרד בצורה שיכולה להתלבש על אובייקטים קיימים ולהוסיף להם את ההתנהגות שמימשנו. לדוגמה, כדי לאפשר למשתמש לגרור (Drag) אלמנט באפליקציה, ניתן לממש יכולת זו כהתנהגות, ואז נוכל להוסיף התנהגות זו לכל אלמנט שנרצה שיהיה בר-גרירה. מימוש ההתנהגות עצמה נעשה על-ידי מפתח התוכנה (Developer) בעזרת קוד C#. לאחר שאובייקט ההתנהגות מומש, מעצב התוכנה (Designer) יכול להשתמש בו על כל אלמנט על-ידי גרירה של ההתנהגות הרצויה אל האלמנט בעזרת כלי עיצוב כמו Microsoft Blend.

למה זה טוב?
התנהגויות מאפשרות להוסיף יכולות חדשות לאלמנטים קיימים של WPF, בצורה שמאוד מותאמת לסגנון העבודה בWPF, מפתח מול מעצב. המפתח מממש את היכולת החדשה בשיטה של Behavior ואילו המעצב משתמש ביכולת שפותחה ע"י גרירת ההתנהגות אל האלמנט המבוקש. בנוסף, שימוש בהתנהגויות נותן לנו כמפתחים שיטה חדשה לשימוש חוזר בקוד שאינה מבוססת על ירושה (Inheritance).
שימוש בהתנהגויות בעזרת Blend
ראשית, נציג כיצד להשתמש בהתנהגויות תוך שימוש בכלי Microsoft Expression Blend 4. יש לציין כי כלי זה הינו כלי עזר לעבודה בעיצוב אפליקציות WPF ו-Silverlight, וכי ניתן להוריד גרסת התנסות ל-60 יום בקישור הבא. בדוגמה הבאה ניצור פרויקט WPF חדש בעזרת Blend, נוסיף לו אלמנט מטיפוס אליפסה ונוסיף לאליפסה התנהגות של גרירה. בעזרת התנהגות זו נוכל בזמן ריצה לתפוס את האליפסה עם העכבר ולהזיז אותה לכל מקום באפליקציה שלנו:
נפתח Blend על-ידי בחירתו מרשימת התוכניות וניצור פרויקט WPF חדש על-ידי לחיצה על New Project.
כעת נבחר את הקטגוריה WPF, נבחר את סוג האפליקציה WPF Application, ונעניק לה שם: BehaviorsDemo, לבסוף נאשר את היצירה על-ידי לחיצה על הכפתור OK.
נבחר אוביקט מטיפוס אליפסה ע"י לחיצה על Assets, לאחר מכן נבחר Shapes, ומתוך הצורות האפשריות נבחר Ellipse.
כעת נלך למשטח העבודה ונצייר את האליפסה. ניתן לשנות את צבעה על-ידי בחירה מתוך פקד הצבעים שמופיע מימין למשטח העבודה.
כעת נרצה להוסיף לאליפסה שלנו התנהגות של גרירה, כלומר נרצה לאפשר למשתמש לגרור את האליפסה בתוך האפליקציה. לצורך כך נבחר בקטגוריה Behaviors ומתוכה נבחר בהתנהגות MouseDragElementBehavior.
כעת נלחץ (בלי לעזוב) על MouseDragElementBehavior ונגרור את העכבר אל הצורה שעבורה אנו רוצים להוסיף את ההתנהגות, במקרה שלנו אל האליפסה, ונשחרר את העכבר.
סיימנו! כל מה שנדרש בשביל להוסיף את התנהגות הגרירה לאליפסה היה לגרור את אובייקט ההתנהגות מעל האליפסה. כעת נריץ את התוכנית על-ידי לחיצה על תפריט Project ובחירה Run Project, או לחילופין לחיצה על מקש F5.
כעת נסו בעצמכם לגרור את האליפסה בתוך האפליקציה.
ניתן להוריד את הקוד המלא בכתובת הבאה: BehaviorsDemo.zip. הערה: ניתן להריץ את התוכנית בקלות על-ידי הפעלת הקובץ BehaviorsDemo.exe בספריה bin/Debug.
התנהגויות ב-Visual Studio
כעת נראה כיצד להשתמש בהתנהגויות תוך שימוש בכלי Microsoft Visual Studio 2010 ונממש את אותה הדוגמא כמו מקודם, אבל הפעם ללא שימוש בכלי העיצוב (Designers): ראשית, נפתח פרויקט חדש מסוג WPF Application, ונקרא לו BehaviorsDemoVS.
כעת נוסיף את ה-References הדרושים לצורך הכרה של מנגנון ההתנהגויות. נלך ל- Solution Explorer, נלחץ עם הכפתור הימני בעכבר על References ונבחר ב-Add Reference.
כעת נלחץ על Browse, נעבור לספריה:
C:\Program Files\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries
נבחר את הקבצים: System.Windows.Interactivity.dll, Microsoft.Expression.Interactions.dll ונלחץ על OK לצורך הוספתם לפרויקט. ראוי לציין כי קבצים אלו מגיעים כחלק מהתקנת Blend 4. לחילופין, ניתן להתקין אותם על-ידי הורדה של Microsoft Expression Blend 4 SDK בכתובת הבאה.
נכתוב את הקוד הבא ב MainPage.xaml לצורך הוספת האליפסה והתנהגות הגרירה:
שימו לב, כל מה שנדרש לצורך הוספת התנהגות הגרירה לאליפסה הוא הוספת 3 שורות ב-XAML. בפרט, אין צורך בכתיבת קוד C#. כעת לחצו על F5 להרצת התוכנית ונסו לגרור את האליפסה.
היכן ניתן למצוא התנהגויות?
מלבד ההתנהגויות שקיימות ב-Microsoft Blend ניתן למצוא התנהגויות שפותחו על-ידי הקהילה באתר Microsoft Expression Gallery:
  • Glass Behavior for WPF: הוספת אפקט זכוכית לאלמנטים ב-WPF
  • TextBox Enter Button Invoke: לחיצה על מקש Enter בתוך TextBox תגרום להפעלת כפתור.
  • Animate Visibility Behavior: שינוי מצב Visibility של אלמנט יתבצע באמצעות אנימציה.
סיכום ביניים
בחלק זה של המדריך למדנו מהן התנהגויות, מה היתרונות בשימוש בהן וכיצד משתמשים בהן בעזרת הכלים Microsoft Blend ו-Microsoft Visual Studio. בחלק הבא נלמד מהו תהליך הפיתוח של התנהגות חדשה וכן נראה דוגמה מלאה למימוש של התנהגות.
בחלק זה נלמד כיצד ליצור התנהגות חדשה בעזרת Visual Studio 2010, ולכן מיועד למפתחים בעל ניסיון בפיתוח בטכנולוגיית WPF.
מתכון ליצירת התנהגות
ראשית, ניצור מחלקה חדשה שיורשת מ Behavior>T>. לאחר מכן נדרוס (Override) את הפונקציה OnAttached. פונקציה זו נקראת פעם אחת כאשר ההתנהגות משוייכת לאלמנט, ובה נבצע את השינויים הדרושים על האלמנט שאליו ההתנהגות משוייכת (AssociatedObject). בדרך כלל, נשנה את התכונות של האלמנט עליו אנו פועלים וכן נרשם לאירועים שמעניינים אותנו. לאחר מכן נדרוס את הפונקציה OnDetaching, אשר נקראת פעם אחת כאשר ההתנהגות מוסרת מאלמנט. בפונקציה זו נבטל את השינויים שעשינו בפונקציה OnAttached. אם אנו בטוחים שלא יסירו את ההתנהגות במהלך ריצת התוכנית, ניתן לוותר על מימוש פונקציה זו.
דוגמא למימוש התנהגות
בדוגמא זו נממש אפקט של שיקוף-מראה לאלמנטים ב-WPF. נכתוב את האפקט בתור התנהגות כך שנוכל אחר כך להשתמש בה על כל אלמנט על-ידי גרירה של ההתנהגות ב-Blend אל האלמנט הרצוי.
נפתח פרויקט חדש מסוג WPF Application, ונקרא לו WpfReflectionBehaviorDemo.
כעת נוסיף את ה-Reference הדרוש לצורך הכרת המחלקה Behavior>T>. כעת נלך ל-Solution Explorer, נלחץ עם כפתור ימני בעכבר על References ונבחר Add Reference.
כעת נלחץ על Browse, נעבור לספריה:
C:\Program Files\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries
נבחר את הקובץ: System.Windows.Interactivity.dll ונלחץ על OK לצורך הוספתו לפרויקט. יש לציין כי קובץ זה מגיע כחלק מהתקנת Blend 4. לחילופין, ניתן להתקין אותו על-ידי הורדה של Microsoft Expression Blend 4 SDK בכתובת הבאה.
על מנת להוסיף מחלקה חדשה נלחץ עם כפתור ימני בעכבר על שם הפרויקט (WpfReflectionBehaviorDemo) בחלון Solution Explorer, נבחר באפשרות Add ואז Class.
ניתן למחלקה החדשה את השם ReflectionBehavior ונאשר על-ידי לחיצה על כפתור OK.
נשנה את המחלקה כך שתהיה נגישה מכל מקום (Public) וכן תבצע ירושה מהמחלקה <Behavior<FrameworkElement. משמעות הפרמטר FrameworkElement היא שניתן להצמיד את ההתנהגות שאנו מגדירים רק על אלמנטים שיורשים מ-FrameworkElement:
public class ReflectionBehavior : Behavior<FrameworkElement>
{
}
יש להוסיף בשלב זה לראש הקובץ את השורות הבאות:
;using System.Windows
;using System.Windows.Controls
;using System.Windows.Data
;using System.Windows.Interactivity
;using System.Windows.Media
מימוש OnAttached

ראשית נוסיף דריסה (Override) של הפונקציה OnAttached:

הגדרת הפונקציות ReplaceControlWithProxyGrid ו-AddReflectionEffect תגיע מיד בצירוף הסבר. רשאית, כדי לממש אפקט שיקוף-מראה יש צורך להוסיף אלמנט נוסף לעץ הלוגי שיציג את תמונת השיקוף. לכן, בשלב ראשון אנו נחליף את האלמנט הקיים באלמנט מסוג Grid שיכיל את האלמנט המקורי וכן אלמנט נוסף שיציג את תמונת השיקוף.
בשביל להחליף את האלמנט המקורי באלמנט Grid יש צורך להסיר אותו מה-Container שמכיל אותו ולצרף במקומו את אלמנט ה-Grid. יש לטפל בשני מקרים שונים לפי סוג ה-Container שמכיל את האלמנט המקורי: מקרה שבו ה-Container של האלמנט המקורי יורש מ-Panel ומ-ContentControl. קטע הקוד הבא מבצע את הטיפול בשני המקרים:
כעת נרצה להוסיף את אפקט השיקוף-מראה לאלמנט החדש שהוספנו. כדי ליצור את האפקט נשתמש ביכולות הבאות:
  • VisualBrush לצורך ציור האלמנט המקורי
  • ScaleTransform לצורך היפוך הציור של האלמנט המקורי
  • TranlateTransform לצורך הזזת הציור של האפקט אל מתחת לאלמנט המקורי
  • OpacityMask לצורך יצירת ציור שהולך ונהיה שקוף
 קטע הקוד הבא משתמש ביכולות אלו ליצירת האפקט:
בכך סיימנו לממש את ההתנהגות. ראוי לציין שהמימוש אינו מושלם ואם נרצה להשתמש בו באפליקציה אמיתית יש לטפל במקרי קצה נוספים וכן לממש גם את הפונקציה OnDetaching כך שתסיר את השינויים שעשינו. יחד עם זאת, לצורך הדגמת הנושא המימוש הנ"ל מספיק טוב.
שימוש בהתנהגות החדשה
בשביל להדגים את השימוש בהתנהגות החדשה שיצרנו נוסיף לאפליקציה שלנו כפתור ותמונה, ונוסיף לכל אחד מהם ההתנהגות החדשה. קטע הקוד הבא מראה כיצד להגדיר זאת:
ניתן להוריד את הקוד המלא בכתובת הבאה: WpfReflectionBehaviorDemo.zip. הערה: ניתן להריץ את התוכנית בקלות על-ידי הפעלת הקובץ WpfReflectionBehaviorDemo.exe בספריה bin/Debug.
סיכום

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

אריק הוא יועץ בכיר בקבוצת סלע, ומפעיל בלוג ברשת בנושא פיתוח: http://blogs.microsoft.co.il/blogs/arik

הצטרפו לערוץ הטלגרם שלנו!

קבלו עדכונים שוטפים וחדשות מעולם הטכנולוגיה ישירות לטלפון שלכם.

הצטרפו עכשיו

אנת'רופיק חוסמת שכפול משחקים ב-Claude, ומפתחים כבר נפגעים
היום לפני 7-14 שנים ב-HWzone: Mi Note 10, קינקט ועוד
עד 33% יותר בגיימינג: ההימור החדש של אינטל עם Nova Lake
סם אלטמן: ה-RAM במחשב שלכם מבזבז זכרון שיכל להיות בחוות שרתים
RTX 5080 נעלם מחנות NVIDIA, והמחיר כבר עבר 2,000 דולר
איך זה גורם לך להרגיש?
אהבתי!0
מצחיק!0
עצוב0
מופתע0
משועמם0
כועס0
טוען תגובות...

כתבות פופולריות

משטח משלוח של כרטיסי מסך יוקרתיים במחסן מטענים בנמל תעופה, עם אריזות חסרות וניילון עטיפה קרוע
חצי מיליון דולר נעלמו בשדה התעופה: שני משטחים של RTX 5090 אבדו
20/10/2026
הדרך להפסיק לשלם ולקחת בעלות: בנינו שרת AI מפלצתי מקומי
22/08/2026
Google's Gemini 4 Carbon Tops Every Other Model In All But Two Of Google's Benchmarks, Scoring 88.2 Percent On SEC-bench Pro Vulnerability Discovery
גוגל מציגה את Gemini 4 Carbon: ראשון בדירוג, סגור לציבור
29/10/2026
קונסולת PlayStation 5 לצד מסך המציג משחקי PC בתוך ממשק הקונסולה באמצעות Playden
בלי מחשב ובלי סטרימינג: משחקי PC רצים ישירות על PlayStation 5
27/10/2026
HWzoneHWzone
עקבו אחרינו
  • אודות האתר
  • צרו קשר
  • פרסם אצלנו
  • תנאי שימוש ומדיניות פרטיות
  • הצהרת נגישות