לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 14-02-2007, 09:36
צלמית המשתמש של Humbug
  משתמש זכר Humbug Humbug אינו מחובר  
אדמין לשעבר
 
חבר מתאריך: 25.10.01
הודעות: 20,292
מידע DesignMode בWPF (לא שאלה)

רקע

צוות Cider וWPF במיקרוסופט נתקלו בסוגיה - מה לעשות עם הProperty שממש UserControl בגרסאות הישנות של .NET, הלא הוא DesignMode.
הProperty הזה אפשר למפתחים לזהות האם הUserControl שהם יצרו רץ בסביבת Design או בRuntime, וכך להתאים את הלוגיקה.
עם זאת, היו שני חסרונות גדולים שלצערנו רובנו הכרנו:
  1. לא ניתן היה לקבל סטטוס מדויק בתוך הConstructor של הUserControl. זאת בגלל שהפרמטר DesignMode קיבל ערך רק אחרי שהDesigner ביצע Deserialization לקוד שכתוב בInitializeComponents.
  2. UserControls מקננים (כאלו שנמצאים בתוך הUserControls שאותם אנחנו כרגע מעצבים), לא ידעו להחזיר תשובה נכונה בפרמטר הזה.
הדגמה למצב הישן
קוד:
public class CustomButton : Button { public CustomButton() { if (this.DeisgnMode) { this.Text= "In Design Mode"; } else { this.Text= "Runtime"; } } }


הפתרון הראשון (מאחד הCTPים)

הפתרון שמיקרוסופט מצאו בהתחלה היה קצת מפגר (קישור לבלוג של Urban Potato). מצד אחד, הם כן הפכו את הפרמטר הזה לפרמטר גלובאלי (אגב, גם בWinForms הייתה אפשרות דרך הLicenceManager לראות גלובאלית אם אנחנו בDesign Mode או לא.), מצד שני - הם סיבכו אותנו
קצת, והחזירו את זה רק בתור DependencyProperty דרך הAppDomain
זה נראה כך:


קוד:
bool IsDesignMode { get { DependencyProperty isDesignModeProperty = (DependencyProperty)AppDomain.CurrentDomain.GetDat a(“IsDesignModeProperty”); return isDesignModeProperty == null ? false : true.Equals(isDesignModeProperty.GetValue(this)); } }


הפתרון בהפצה הסופית

מתישהו בשלהי ספטמבר 2006, אחרי תגובה של טוקבקיסט בבלוג של Urban Potato, הם יצרו מטודה שמחזירה bool כמו שכולנו אוהבים.

השימוש הוא כדלקמן:
קוד:
public class CustomButton : Button { public CustomButton() { if (System.ComponentModel.DesignerProperties.GetIsInD esignMode(this)) { Content = "In Design Mode"; } else { Content = "Runtime"; } } }


זהו. זה הסוד. UserControl בWPF לא מממש את DesignMode, וזוהי הדרך לדעת את זה.
GetIsInDesignMode(). תכירו.




כתבתי את ההודעה הזאת אחרי שביליתי כמה שעות בניסיון למצוא את זה, ולצערי - Google לא עזר כ"כ.
בסופו של דבר, נמצאה האבידה בבלוג של See Win App




מילות מפתח לגוגל: DesignMode, WPF, Cider, IsDesignModeProperty, CLR 3.0
_____________________________________
דורון

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 09:48

הדף נוצר ב 0.05 שניות עם 11 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר