Behaviors חלק 3 – יצירת ב Custom Behavior משלנו

8 ביוני 2012

תגיות: , , ,
תגובה אחת



בפוסט הקודם ראינו איך להשתמש ב Behaviors מתוך ויז'ואל סטודיו

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

על מנת ליצור behavior, יש לממש את המחלקה Behavior של T. כשבמקום T נשים את מחלקת הבסיס אליה נרצה לחבר את ה Behavior. לדוגמא:

public class HighlightBehavior : Behavior<Control>

{

 

}

ה Behavior יחובר למחלקה קונטרול, מה שאומר שאפשר להשתמש ב Behavior הזה בכל מחלקה שיורשת מקונטרול.

החלק החשוב במחלקה הזו היא המתודה OnAttach שאותה תמיד נדרוס. המתודה הזו נקראת בפעם הראשונה שמוסיפים את ה Behavior לקונטרול כלשהו, ובמתודה הזו אנחנו נכתוב את כל הקוד ההתחלתי שלנו, כאן נוסיף את ההתנהגות לקונטרול:

public class HighlightBehavior : Behavior<Control>

    {

        protected override void OnAttached()

        {

            

 

 

        }

    }

 

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

נוסיף למתודה הזו את הקוד הבא:

this.AssociatedObject.MouseEnter += new MouseEventHandler(AssociatedObject_MouseEnter);

this.AssociatedObject.MouseLeave += new MouseEventHandler(AssociatedObject_MouseLeave);

this.AssociatedObject הוא הקונרטול עליו ההתנהגות (Behavior) “יושבת”. במקרה שלנו הוא מסוג קונטרול.

הרישום הוא לאירועים MouseEnter ו MouseMove בשביל שנוכל לשנות את צבע הרקע של הקונרול בכניסה וביציאה של העכבר ממנו.

כך יראו המתודות שמטפלות באירועים הנ”ל:

void AssociatedObject_MouseLeave(object sender, MouseEventArgs e)

{

    this.AssociatedObject.Background = Brushes.White;

}

 

void AssociatedObject_MouseEnter(object sender, MouseEventArgs e)

{

    this.AssociatedObject.Background = Brushes.Blue;

}

והקוד המלא של ההתנהגות יראה כך:

 

public class HighlightBehavior : Behavior<Control>

{

    protected override void OnAttached()

    {

 

        this.AssociatedObject.MouseEnter += new MouseEventHandler(AssociatedObject_MouseEnter);

        this.AssociatedObject.MouseLeave += new MouseEventHandler(AssociatedObject_MouseLeave);

 

    }

 

    void AssociatedObject_MouseLeave(object sender, MouseEventArgs e)

    {

        this.AssociatedObject.Background = Brushes.White;

    }

 

    void AssociatedObject_MouseEnter(object sender, MouseEventArgs e)

    {

        this.AssociatedObject.Background = Brushes.Blue;

    }

}

קצר ולעניין.

שימוש בהתנהגות שלנו יעבוד בדיוק כמו שימוש בהתנהגות רגילה:

 

<Grid>

    <TextBox Height="39" HorizontalAlignment="Left" Margin="59,47,0,0" Name="textBox1" VerticalAlignment="Top" Width="129" >

        <i:Interaction.Behaviors>

            <my:HighlightBehavior />

        </i:Interaction.Behaviors>

    </TextBox>

ה TextBox עכשיו יקבל את ההתהגות שכתבנו. (TextBox יורש מקונטרול. במידה והיינו שמים את ההתנהגות על מחלקה שלא יורשת מקונטרול היינו מקבלים שגיאה).

החלק החזק של ההתנהגות מגיע עכשיו – אפשר לשים אותה כמה פעמים שנרצה על קונרולים בחלון, ונקבל התנהגות שה Code Reuse שלה מאוד גבוה. כותבים פעם אחת, משתמשים כמה שרוצים:

 

<Grid>

    <TextBox Height="39" HorizontalAlignment="Left" Margin="59,47,0,0" Name="textBox1" VerticalAlignment="Top" Width="129" >

        <i:Interaction.Behaviors>

            <my:HighlightBehavior />

        </i:Interaction.Behaviors>

    </TextBox>

    <TextBox Height="39" HorizontalAlignment="Left" Margin="261,47,0,0" Name="textBox2" VerticalAlignment="Top" Width="129" >

        <i:Interaction.Behaviors>

            <my:HighlightBehavior />

        </i:Interaction.Behaviors>

    </TextBox>

    <TextBox Height="39" HorizontalAlignment="Left" Margin="89,148,0,0" Name="textBox3" VerticalAlignment="Top" Width="129" >

        <i:Interaction.Behaviors>

            <my:HighlightBehavior />

        </i:Interaction.Behaviors>

    </TextBox>

    <CheckBox Content="CheckBox" Height="46" HorizontalAlignment="Left" Margin="278,145,0,0" Name="checkBox1" VerticalAlignment="Top" Width="167">

        <i:Interaction.Behaviors>

            <my:HighlightBehavior />

        </i:Interaction.Behaviors>

 

    </CheckBox>

</Grid>

 

עכשיו כשנעלה מעל כל אחד מהקונטרולים נראה שהוא משנה את הצבע. בין אם זה ה TextBox –

image

ובין אם זה הצ’קבוקס (הריבוע הכחול הקטן זה כל הרקע שלו).

 

image

 

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

את ההתנהגות שכתבנו אפשר להוסיף גם מבלנד:

 

image

וכך נראה בלנד לאחר שגררנו את ההתנהגות על ListBox שהוספנו לחלון:

 

image

בלנד אפילו מבין שאפשר להוסיף את ההתנהגות אך ורק למחלקה שיורשת מקונטרול, ולפיכך בכלל לא יאפשר הוספה של ההתנהגות על כל דבר אחר (Rectangle לדוגמא)

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

את הקוד ניתן להוריד מכאן – http://sdrv.ms/LhAezB


בפוסט הבא נכיר סוג נוסף של Behaviors שמתנהג טיפה שונה, ומאפשר יותר שליטה על *מתי* תקרה ההתנהגות

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

תגובה אחת

  1. Breendaznozw6 בדצמבר 2013 ב 20:26

    mbt shoes for kids Behaviors חלק 3 – יצירת ב Custom Behavior משלנו | אלעד כץ | Elad Katz

    הגב