WPF הוספת tooltip ל-Header בתוך style
-
אני שמתי את השורה הזו בהגדרה של ה-label:
<Label Margin="10 0 0 0" VerticalAlignment="Center" Content="{TemplateBinding Header}" [u:1j4sfrr9]ToolTip="{Binding Content.Text}"[/u:1j4sfrr9] Grid.Column="1" />
אי אפשר לשים את זה בשורה הרביעית, הוא נותן שגיאה:
The property 'ToolTip' was not found in type 'ControlTemplate'.פורסם במקור בפורום CODE613 ב07/07/2013 20:39 (+03:00)
-
זה באמת הוסיף את ה-tooltip אבל אם היה header שהוגדר כך (מכיל טקסט + תמונה קטנה):
<tabs:ChromeTabItem.Header> <StackPanel Orientation="Horizontal"> <Image Source="..\Images\questionnare.ico"/> <TextBlock Text="שאלון"/> </StackPanel> </tabs:ChromeTabItem.Header>
אז ברגע שה -tooltip מופיע, ה-header נהיה ריק והתוכן שלו לא חוזר גם בהמשך, הערך ב-tooltip נשאר.
(אותה התנהגות קוראת גם אם אני שמה את השורה הזו בהגדרה של ה-label במיקום שהראיתי למעלה)ממש לא ברור לי למה, זה נראה כאילו ה-tooltip שאב ממנו את התוכן של ה-header.
פורסם במקור בפורום CODE613 ב08/07/2013 12:39 (+03:00)
-
עכשיו הבנתי הכל. ברור למה.
את מגדירה שהטולטיפ יציג, את תוכן המאפיין Header.
תוכן הHeader במקרה והוא טקסט, אז הוא מחזיר את הערך.
במידה והוא אלמנט הוא מחזיר העתקט של Reference לאותו אלמנט UI.
אלמנט UI יכול להיות בן של אבא אחד בלבד, אז הוא עובר דירה.הנה המחשה חיה:
<Button x:Name="Bt1" HorizontalAlignment="Left" Margin="269,194,0,0" VerticalAlignment="Top" Width="75"> <TextBlock Text="123" /> </Button> <Button Content="{Binding Content, ElementName=Bt1}" HorizontalAlignment="Left" Margin="269,219,0,0" VerticalAlignment="Top" Width="75" />
אז מה עושים? צריך לכתוב את האלמנטים של הHeader בטמפלט שלו ולא בו ישירות בתור Content שלו.
ואז להציב בו טקסט פשוט.
אז במקום הקוד של ההודעה אחרונה תכתבי ככה:<TabItem.HeaderTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Image Source="..\Images\questionnare.ico"/> <TextBlock Text="{TemplateBinding Content}"/> </StackPanel> </DataTemplate> </TabItem.HeaderTemplate>
ואז באלמנט TabItem תכתבי Header="שאלון...".
אז הטולטיפ יציג רק טקסט.
אם את רוצה שהטולטיפ יהיה בדיוק כמו הHeader, תעתיקי את הטמפלט הנ"ל לטולטיפ.טמפלט.
נשמח לשמוע תוצאות.פורסם במקור בפורום CODE613 ב08/07/2013 13:37 (+03:00)
-
לא כל כך הבנתי איפה לשים את ה-HeaderTemplate. ניסיתי לשים אותו בהגדרות של ה-tabitem כך:
<tabs:ChromeTabItem Header="שאלון " > <tabs:ChromeTabItem.HeaderTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Image Source="..\Images\questionnare.ico"/> <TextBlock Text="{TemplateBinding Content}" /> </StackPanel> </DataTemplate> </tabs:ChromeTabItem.HeaderTemplate>
ובהרצה אני רואה רק טאב שיש לו header שאלון בלי התמונה וכך גם ב-tooltip.
האמת לא כל כך נורא שלא תופיע התמונה, זה לא מאוד עקרוני בשבילי רק מעניין מדוע.פורסם במקור בפורום CODE613 ב10/07/2013 12:56 (+03:00)
-
אהה סוף סוף עליתי על זה.
את צדקת מהתחלה.
את השורה עם הלבל בקוד של ההודעה הראושנה שלך, השורה הזו:<Label Margin="10 0 0 0" VerticalAlignment="Center" Content="{TemplateBinding Header}" Grid.Column="1" />
תחליפי בזו:
<ContentPresenter Margin="10 0 0 0" VerticalAlignment="Center" Grid.Column="1" Content="{TemplateBinding HeaderedContentControl.Header}" ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}" ContentStringFormat="{TemplateBinding HeaderedContentControl.HeaderStringFormat}" ContentSource="Header" />
ואז, נראה לי, שגמרנו סופית את הבעייה.
מה עשינו? החלפנו פקד לבל קשוח, שלא "מכבד" את הגדרות הטמפלט, במקורי שכן "מכבד".פורסם במקור בפורום CODE613 ב11/07/2013 19:52 (+03:00)
-
שכחתי להוסיף את הטולטיפ,
אז בשביל טולטיפ זהה לHeader, במקום השורה דלעיל שימי את זה:<ContentPresenter Margin="10 0 0 0" VerticalAlignment="Center" Grid.Column="1" Content="{TemplateBinding HeaderedContentControl.Header}" ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}" ContentStringFormat="{TemplateBinding HeaderedContentControl.HeaderStringFormat}" ContentSource="Header"> <ContentPresenter.ToolTip> <ContentControl Content="{TemplateBinding Header}" ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}" /> </ContentPresenter.ToolTip> </ContentPresenter>
פורסם במקור בפורום CODE613 ב11/07/2013 20:08 (+03:00)