משיב מוביל
איך מגדירים VisualState ל-ItemTemplate

שאלה
-
חיפשתי קצת ברשת וראיתי שכותבים שבאמת אי אפשר , גם כי כל DataTemplate אי אפשר לפנות אליו ב-GoToState , וגם שזה מבנה כללי לכל האייטמים כך שאין שום דרך לפנות אליו
לפיכך איזה רעיון חילופי יכול להיות או שלא הבנתי את הדברנים נכון
צבי דויטש
יום רביעי 13 פברואר 2013 17:49
תשובות
-
היי,
הסיבה המרכזית שזה לא אפשרי (בצורה קלה) היא שכדאי גם להחליף את הפקד שמציג את היישויות, כלומר כאשר עוברים למצב Snap שימוש ב - GridView לא נכון בגלל שהוא תומך בגלילה אופקית ועל פי העקרונות של עבודה עם מטרו במצב Snap יש לעבוד עם גלילה אנכית.
לכן י ש ליצור שני פקדים אחד - Grid והשני List ואז בעזרת VisualState להחליף בניהם.
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="itemListView" Storyboard.TargetProperty="Visibility"> <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="itemGridView" Storyboard.TargetProperty="Visibility"> <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> </ObjectAnimationUsingKeyFrames>
בברכה,
Please mark the replies as answers if they help and unmark them if they provide no help.
My blog: blogs.microsoft.co.il/blogs/shair- הוצע כתשובה על-ידי Shai Raiten יום רביעי 27 פברואר 2013 08:26
- סומן כתשובה על-ידי Eran Sharvit יום רביעי 27 פברואר 2013 13:56
יום רביעי 27 פברואר 2013 08:12 -
תשובתך נכונה מאד.
אך למעשה הרעיון יותר מזה כי VisualState עובד רק בשני אופנים
1. ב-ControlTemplate באירועי עכבר וכדו' שזה עובד באופן אוטומטי ללא צורך במדתודה להפעיל את המצבים.
2. ב-ControlTemplate במצבים ידניים שמצריכים מתודה שתפעיל אותם לנווט בין ה-States וכמובן להעביר למתודה את הפקד.
שים לב שה-VisualState בPage הוא ב-Grid הראשי שהוא ה-ControlTemplate של ה-Page.
אין אפשרות לנווט בין מצבים בשום מאפיין אחר אין אפשרות ליצור מצבים לדוגמא למאפיין Content ולא למאפיין Color ישירות, אפילו לא ב-GridView , רק בתוך ה-ControlTemplate.
מכיון כמו שכתבת לדוגמא בDataTemplate יש עוד הרבה דוגמאות לסיבה הזו שמיקרוסופט דחקו לפינה הרבה יותר ממה שהיה אפשר בWPF.
הוה אומר שבסך הכל צריך מראש לבנות את המבנה נכון ואם מתעורר צורך לשנות את המבנה יש לשנות את הבסיס שהוא ה-ControlTemplate שזה סדר העבודה.
ולגבי הGridView פשוט בתוך ה-DataTemplate להתייחס ישירות לפקד העוטף ולשים פקד משלך ותכניס לו ב-ControlTemplate את כל סוגי המצבים העולים על רוחך ולא להסתמך על DefaultStyle של ה-Container של האלמנט. וכמובן להוסיף לו אירוע לדוגמא בעת שינוי מידה ובמתודה לנווט בין כל המצבים הנדרשים.
צבי דויטש
- סומן כתשובה על-ידי צבי דויטש יום רביעי 27 פברואר 2013 11:34
יום רביעי 27 פברואר 2013 11:33
כל התגובות
-
הי,
האם בעייתך נפתרה? אם לא, נשמח לקבל מידע נוסף כמו באיזה שפה האפליקציה, קטע קוד וכל דבר שיכול לעזור.
תודה.
מיקרוסופט מציעה שירות זה ללא תשלום, למטרת סיוע למשתמשים והעשרת הידע הקשור בטכנולוגיות ובמוצרים של מיקרוסופט. תוכן זה מתפרסם כפי שהוא והוא אינו מעיד על כל אחריות מצד מיקרוסופט.
יום שני 25 פברואר 2013 15:54 -
היי,
הסיבה המרכזית שזה לא אפשרי (בצורה קלה) היא שכדאי גם להחליף את הפקד שמציג את היישויות, כלומר כאשר עוברים למצב Snap שימוש ב - GridView לא נכון בגלל שהוא תומך בגלילה אופקית ועל פי העקרונות של עבודה עם מטרו במצב Snap יש לעבוד עם גלילה אנכית.
לכן י ש ליצור שני פקדים אחד - Grid והשני List ואז בעזרת VisualState להחליף בניהם.
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="itemListView" Storyboard.TargetProperty="Visibility"> <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="itemGridView" Storyboard.TargetProperty="Visibility"> <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> </ObjectAnimationUsingKeyFrames>
בברכה,
Please mark the replies as answers if they help and unmark them if they provide no help.
My blog: blogs.microsoft.co.il/blogs/shair- הוצע כתשובה על-ידי Shai Raiten יום רביעי 27 פברואר 2013 08:26
- סומן כתשובה על-ידי Eran Sharvit יום רביעי 27 פברואר 2013 13:56
יום רביעי 27 פברואר 2013 08:12 -
תשובתך נכונה מאד.
אך למעשה הרעיון יותר מזה כי VisualState עובד רק בשני אופנים
1. ב-ControlTemplate באירועי עכבר וכדו' שזה עובד באופן אוטומטי ללא צורך במדתודה להפעיל את המצבים.
2. ב-ControlTemplate במצבים ידניים שמצריכים מתודה שתפעיל אותם לנווט בין ה-States וכמובן להעביר למתודה את הפקד.
שים לב שה-VisualState בPage הוא ב-Grid הראשי שהוא ה-ControlTemplate של ה-Page.
אין אפשרות לנווט בין מצבים בשום מאפיין אחר אין אפשרות ליצור מצבים לדוגמא למאפיין Content ולא למאפיין Color ישירות, אפילו לא ב-GridView , רק בתוך ה-ControlTemplate.
מכיון כמו שכתבת לדוגמא בDataTemplate יש עוד הרבה דוגמאות לסיבה הזו שמיקרוסופט דחקו לפינה הרבה יותר ממה שהיה אפשר בWPF.
הוה אומר שבסך הכל צריך מראש לבנות את המבנה נכון ואם מתעורר צורך לשנות את המבנה יש לשנות את הבסיס שהוא ה-ControlTemplate שזה סדר העבודה.
ולגבי הGridView פשוט בתוך ה-DataTemplate להתייחס ישירות לפקד העוטף ולשים פקד משלך ותכניס לו ב-ControlTemplate את כל סוגי המצבים העולים על רוחך ולא להסתמך על DefaultStyle של ה-Container של האלמנט. וכמובן להוסיף לו אירוע לדוגמא בעת שינוי מידה ובמתודה לנווט בין כל המצבים הנדרשים.
צבי דויטש
- סומן כתשובה על-ידי צבי דויטש יום רביעי 27 פברואר 2013 11:34
יום רביעי 27 פברואר 2013 11:33