This is a mirror of official site: http://jasper-net.blogspot.com/

ATTACHED PROPERTY

| Thursday, October 28, 2010
בפוסט הקודם דיברנו על Dependency property. כעת נדבר על Attached. קודם כל נראה דוגמא קטנה :

<Canvas>
       <Button Canvas.Top="20"
               Width="150"
               Height="50"
               Content="Button in canvas"
               Canvas.Left="36"></Button>
   </Canvas>


הקוד הבא ימקם Button בתוך הCanvas על בסיס של Top ו Left. אנחנו רואים שהמאפיינים Top  ו Left יושבים בתוך ה Canvas ולא בתוך ה Button, למה ? למה אין ל Button מאפיינים של Top ושל Left?! אם נחשוב לרגע נזכור שCanvas הוא רק סוג אחד של Container. Container נוסף שנפוץ בצורה משמעותית יותר מה Canvas הוא ה Grid. ל Grid עצמו אין Top ו Height אלא Column ו Row. אז מה יקרה אם נעבוד בצורה המוצעת כאן ? ל Button יהיה גם top וגםleft ו Column וגם Row. מה יקרה כאשר ירצו להוסיף Container נוסף? האם הגיוני שעל כל Container שנוסיף נצטרך לעבור על כל הControls שרלוונטים ולבצע שינוי גם אצלם ? איך נזכור בכלל איזה Controls רלוונטים. כך שבאמת צריך למצוא פיתרון טוב יותר. ב WPF המציאו את ה Attached Property שמאפשר לנו לשמור נתונים נוספים על פקד בלי שיהיה לא את המאפיין הזה מראש. בואו נראה איך נראה הקוד ב #C ביחס ל XAML למעלה :

           Button b = new Button();
           b.Content = "Button in canvas";
           Canvas.SetLeft(b, 36);
           Canvas.SetTop(b, 20);
           c1.Children.Add(b);

מה הולך פה ? c1 מתייחס כאן ל Canvas עצמו. תיזכרו שוב במילון של ה Dependency Properties מה Post הקודם. באמצעות פונקציה סטטית שיושבת ב Canvas אני שומר על ה Button שה Canvas.Left שלו הוא 36. את מי הערך הזה מעניין ? בטח שלא את ה Button עצמו. כאשר ה Canvas בא לצייר את עצמו הוא עובר על כל ה Childerns שלו ושואל אותם האם יש להם ערכים בשבילו. הערכים הרלוונטים ל Canvas הם left, top, bottom, right, zIndex. הקריאה של הProperty מתבצעת  בצורה הבאה :

Canvas.GetTop(b);

ה Canvas מקבל את הערך ולפי זה יודע איך לצייר אותו. שימו לב שהButton לא שומר canvas.Left על אובייקט ספציפי של Canvas אלא ברמה הסטטית.

Read more: SHIMON DAHAN

Posted via email from .NET Info

0 comments: