locked
VisualTreeHelper.GetParent או ObjectDependency.Parent תמיד מחזיר ריק (כולל דוגמא) RRS feed

  • שאלה

  • לדוגמא

    Grid grid = new Grid();
    Button buton = new Button();
    grid.Children.Add(buton);
    
    var chld = VisualTreeHelper.GetChild(grid, 0);
    //אפשר גם כך
    //var chld = grid.Children[0];
    var prnt = VisualTreeHelper.GetParent(buton);
    //אפשר גם כך
    // var prnt = buton.Parent;
    
    string strprnt = (prnt == null ? "" : prnt.ToString());
    string strchld = (chld == null ? "" : chld.ToString());
    
    //return strprnt = "" ,
    //strchld = "Windows.UI.Xaml.Controls.Button"
    הוא מציג בהורה ריק ובילד מציג את הלחצן.
    יום שני 28 ינואר 2013 17:35

תשובות

  • מתי קטע הקוד הזה נקרא?

    גישה ל-parent של פקד אפשרית רק לאחר שנקרא ה-Loaded event.
    בדוגמת הקוד שרשמת החיבור של ילדים לפנל ובאותו קטע קוד תחקור שלהם לא מאפשר ל-Loaded event לקרות לפני שאתה מתחקר מי ההורה.

    במאמר מוסגר, הייתי מוסיף ילדים ל-Grid רק דרך XAML ולא דרך קוד.

    • סומן כתשובה על-ידי צבי דויטש יום שלישי 29 ינואר 2013 13:07
    יום שלישי 29 ינואר 2013 12:03

כל התגובות

  • מתי קטע הקוד הזה נקרא?

    גישה ל-parent של פקד אפשרית רק לאחר שנקרא ה-Loaded event.
    בדוגמת הקוד שרשמת החיבור של ילדים לפנל ובאותו קטע קוד תחקור שלהם לא מאפשר ל-Loaded event לקרות לפני שאתה מתחקר מי ההורה.

    במאמר מוסגר, הייתי מוסיף ילדים ל-Grid רק דרך XAML ולא דרך קוד.

    • סומן כתשובה על-ידי צבי דויטש יום שלישי 29 ינואר 2013 13:07
    יום שלישי 29 ינואר 2013 12:03
  • דבר ראשון תודה ואכן יש לסמן כתשובה

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

    (אני לא באמת מוסיף ילדים לגריד בקוד, עשיתי זאת רק בשביל הדוגמא)


    צבי דויטש

    יום שלישי 29 ינואר 2013 13:07
  • הסיבה היא שהורה חייב להכיר את הילדים שלו על מנת שיוכל לחשב את הגודל והמיקום של עצמו בתהליך ה-Layout, בעוד שהגישה של הילד לאבא היא לא נחוצה.
    יתרה מכך, ניתן לנתק ילד מהורה ולחבר אותו להורה אחר בזמן ריצה.

    החיבור בפועל של הילד והבן בעץ הוויזואלי מתבצע בעדיפות Dispatcher נמוכה יותר ולכן ניתן לתחקר נושא זה רק לאחר ה-Loaded event.

    יום שלישי 29 ינואר 2013 16:22