locked
דריסה של Style RRS feed

  • שאלה


  • האם יש דרך שע"י הסטייל אני אחייב כל איבבייקט להשתמש בפרופרטי שהגדרתי בסטייל ? 
    לדוגמא , אם יש לי סטייל שפועל על  Label והגדרתי את הפרופרטי של צבע הגופן בסטייל שיהיה אדום .  כעת , יש לי הרבה  Label  בחלון  ,א ך לכל אחד מהם יש צבע אחר במפורש , ואני שואל : האם יש דרך לחייב אותם להתנהג כמו הסטייל שלהם , אף שבאמת לכל אחג מגדיר במפורש פרופרטי אחר .  
    יום רביעי 22 אוגוסט 2012 12:05

תשובות

  • בגדול, אי אפשר! אבל למה הגעת למצב כזה?

    לאתחול property יש סדרי עדיפות. במקרה זה אם דרסת property ברמת הקונטרול, ה- setter של ה- style לא ישפיע בשום צורה על property זה.

    הדרך היחידה זה לדרוס את ה- property דרך ה- control, או לחילופין, לאפס אותו, ואז יקבל את ערכו מהסטייל.

    יש טריק קטן שאפשר לבצע בעזרת style + attached property:

    אתה יוצר attached property שברגע שפועל, מבצע השמה על property שבחרת, עם הערך שבחרת.

    כדי שה-attached property יפעל על כל ה- Labels, אפשר לבצע set בעזרת style.

    תומר


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • הוצע כתשובה על-ידי Elad R Katz שבת 25 אוגוסט 2012 15:56
    • סומן כתשובה על-ידי Eran Sharvit יום שלישי 11 ספטמבר 2012 11:34
    יום שישי 24 אוגוסט 2012 13:36
    מנחה דיון

כל התגובות

  • אם תגדיר את הStyle ללא Key, הוא יחול על כל (ואני אומר 'כל' בהסתייגות) הלייבלים.

      <Style TargetType="{x:Type Label}">
    ...
    </Style>
                     

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

    הוא מתחיל מ ResourceDictionary של הקונטרול הנוכחי, ומחפש resources(בין היתר גם סטיילים) בעלי Key מתאים. הוא ממשיך רקורסיבית במעלה העץ הלוגי עבור כל property מתאים (כלומר כל  שלא נמצא לו resource), ובודק במילונים של כל איבר במעלה העץ, עד לשורש.
    לבסוף, הוא מגיע לקובץ App.Xaml שמגדרים את הapplication resources (ונהוג לשים בו סטיילים וריסורסים שיהיו תקפים לכל המודולים של האפליקציה). אם לא נמצא resource n מתאים נזרקת שגיאה (קומפילציה או זמן ריצה, כתלות בסוג ה resource: סטטי או דינאמי)

    לקריאה נוספת על תהליך חיפוש ה resources לינק

    יום חמישי 23 אוגוסט 2012 14:22
  • בגדול, אי אפשר! אבל למה הגעת למצב כזה?

    לאתחול property יש סדרי עדיפות. במקרה זה אם דרסת property ברמת הקונטרול, ה- setter של ה- style לא ישפיע בשום צורה על property זה.

    הדרך היחידה זה לדרוס את ה- property דרך ה- control, או לחילופין, לאפס אותו, ואז יקבל את ערכו מהסטייל.

    יש טריק קטן שאפשר לבצע בעזרת style + attached property:

    אתה יוצר attached property שברגע שפועל, מבצע השמה על property שבחרת, עם הערך שבחרת.

    כדי שה-attached property יפעל על כל ה- Labels, אפשר לבצע set בעזרת style.

    תומר


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • הוצע כתשובה על-ידי Elad R Katz שבת 25 אוגוסט 2012 15:56
    • סומן כתשובה על-ידי Eran Sharvit יום שלישי 11 ספטמבר 2012 11:34
    יום שישי 24 אוגוסט 2012 13:36
    מנחה דיון