WPF: DataTemplate עם 2 אפשרויות - היש כזאת חיה?
-
אני כותב תוכנה שמאפשרת לקרוא בתוכה תוכן של ספרים.
הוספתי יכולת לפתוח כמה ספרים במקביל. כלומר, עשיתי טאבים שאפשר להוסיף ולהסיר באופן דינמי (כמו בכל דפדפן..) ואם המשתמש רוצה הוא פשוט מוסיף טאב, ואז לוחץ בתפריט על המיקום בספר, וזה מוצג לו באותו טאב, כך שהוא יכול לפתוח כמה ספרים במקביל, ופשוט לעבור בין הטאבים כשהוא רוצה ביתר קלות.
הנה דוגמא:
שאלתי ובקשתי היא: כיון שאיני מאפשר למשתמש לסגור את החלון הראשי, וכן את הטאב עם ה "+" (שנועד להוספת טאבים), אינני רוצה שיוצג לצידם סמל הX. (מבחינת יופי, כי גם כרגע זה לא יסגור... כי בקוד אני בודק את מה הוא מנסה לסגור, ולא מאפשר לו לסגור אותם.)
העניין הוא שכיון שאני מוסיף אותם בצורה דינמית ע"י דטה טמפלייט, השאלה האם אפשר לעשות דטה טמפלייט לראשון ולאחרון, ודטה טמפלייט אחר לשאר?
ואם כן - איך?
כמו כן, אם למישהו יש רעיון אחר לשמות של הלשוניות (במקום "חלון 2" וכו') - אשמח!
תודה רבה!
אברהםפורסם במקור בפורום CODE613 ב06/06/2016 21:29 (+03:00)
-
אם אתה רוצה כמו כרום, נראה לי שדיברו ע"ז פעם בפורום.
אני לא בטוח, אבל נראה לי כאן
http://code.613m.org/viewtopic.php?f=1&t=128&start=10#p782הנה עוד לינקים:
https://github.com/sskodje/wpfchrometabs-mvvm
https://www.nuget.org/packages/WPFChromeTabsMVVM/
https://www.google.co.il/search?sourceid=chrome-psyapi2&ion=1&ie=UTF-8&q=wpf tab chrome control&oq=wpf tab chrome control&aqs=chrome..69i57.11132j0j7&bav=on.2,or.&bvm=bv.123664746,d.d24&biw=1920&bih=912&dpr=1&ech=1&psi=4clVV8qMJYnvUtyJicAK.1465240033277.3&ei=4clVV8qMJYnvUtyJicAK&emsg=NCSR&noj=1פורסם במקור בפורום CODE613 ב06/06/2016 22:11 (+03:00)
-
יש דבר שנקרא DataTemplateSelector
כעת עלה בדעתי דרך אחרת, אם הטאב-איטם עם הסגירה הוא בעצם מחלקה שיורשת מטאב-איטם רגיל, אז תיצור סטייל שיחיל את הדטה-טמפלט שלך על הטאב-איטם שעם הסגירה, ותוסיף למחלקה של הטאב-איטם מאפיין: CloseButtonVisebilty וכך תוכל לשלוט בכל טאב אם יוצג בו הלחצן של הסגירה.
פורסם במקור בפורום CODE613 ב06/06/2016 22:15 (+03:00)
-
@רחמים
יש דבר שנקרא DataTemplateSelectorכעת עלה בדעתי דרך אחרת, אם הטאב-איטם עם הסגירה הוא בעצם מחלקה שיורשת מטאב-איטם רגיל, אז תיצור סטייל שיחיל את הדטה-טמפלט שלך על הטאב-איטם שעם הסגירה, ותוסיף למחלקה של הטאב-איטם מאפיין: CloseButtonVisebilty וכך תוכל לשלוט בכל טאב אם יוצג בו הלחצן של הסגירה.
אחרי ששרפתי מלא שעות בניסיון עם כל מיני ספריות מוכנות שמצאתי.. (בעזרת הקישורים שקליקוואן הביא )
באמת יש שם דברים ברמה! אבל צריך הרבה זמן כדי להבין איך בדיוק לעבוד לפי ההגדרות שלהם וכו', וכיון שאינני מבין גדול בWPF עדיין..
אז אני מעדיף לנסות לעשות את זה לבד..
ניסיתי לעשות כמו שרחמים הציע, ירשתי מTabItem והוספתי לו את הפרופרטי הזה,
העניין הוא שכאשר אני עושה בינדינג לכפתור של הסגירה - משום מה זה לא עובד.. (כלומר הוא לא זורק שום שגיאה, אבל גם ממשיך להראות את ה X בכל הכרטיסיות.
הנה הקוד של הבנידינג:<Button Name="btnDelete" DockPanel.Dock="Right" Margin="2,0,2,0" Padding="0" Visibility="{Binding CloseButtonVisebilty, Converter={StaticResource booleanToVisibilityConverter}}" Click="btnDelete_Click" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}},Path=Name}"> <Canvas Width="24" Height="24" Background="Transparent"> <Path Data="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" Fill="{DynamicResource TabControl.Foreground}" /> </Canvas> </Button>
והנה הקוד של הטאב איטם:
public class TabItemCustom:TabItem { public static readonly DependencyProperty CloseButtonVisebiltyProperty = DependencyProperty.Register("CloseButtonVisebilty", typeof(bool),typeof(TabItemCustom)); public bool CloseButtonVisebilty { get { return (bool)GetValue(CloseButtonVisebiltyProperty); } set { SetValue(CloseButtonVisebiltyProperty, value); } } public TabItemCustom() { CloseButtonVisebilty = true; } }
והנה של הקונוורטר:
class BooleanToVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { bool boolValue = (bool)value; if (boolValue) { return Visibility.Visible; } else { return Visibility.Collapsed; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
סליחה אם משהו מיותר.. פשוט אין לי מושג איפה הבעיה..
תודה רבה מראש!!
אברהםפורסם במקור בפורום CODE613 ב07/06/2016 22:02 (+03:00)
-
-
תודה רבה! אכן שיניתי.
לא הצלחתי להשתמש בטמפלט בינידינג (הוא כלל לא נתן לי את האפשרות הזאת, ואם כתבתי אותה בעצמי הוא סימן לי שגיאה..)
אז מחיפוש בסטאק מצאתי את הקוד הבא:Visibility="{Binding CloseButtonVisebilty, RelativeSource={RelativeSource AncestorType={x:Type local:TabItemCustom}}}"
ואכן זה עובד!!
תודה רבה!!
ClickOne - תודה רבה על כל הקישורים שהבאת!! למדתי מהם המון!!
במיוחד מצאתי כאן אחד שעושה פרוייקט נהדר של עיצובים חדשניים לWPF.פורסם במקור בפורום CODE613 ב07/06/2016 22:33 (+03:00)