WPF:Trigger והמסתעף
-
התפקיד של Trigger זה להחיל עיצובים בסטייל, כאשר מאפיין מקומי/חיצוני מקבל ערך מסויים,
ולבטל את העיצובים הללו כאשר אותו המאפיין כבר לא מכיל את הערך ההוא.המקום לכתיבת טריגר זה רק בתוך סטייל (אמנם בכל אלמנט WPF יש מאפיין בשם Triggers אבל הוא מקבל רק EventTrigger, ולא שימושי בד"כ).
אז הטריגר נחלק לשלוש חלקים:
[list:ottwv6w1]א. מאפיין למעקב אחרי ערכו,
ב. הערך ש"מקפיץ" את החלת הסגנון
ג. הסגנון שיוחל במידה וההמאפיין מאוכלס בערך הנכון.[/list:u:ottwv6w1]בטריגר רגיל, המאפיין שאנו עוקבים אחריו חייב להיות מאפיין מקומי = חבר במאפייני האובייקט עליו בו אנו נמצאים.
נתחיל בדוגמא:
<TextBox Height="23" Width="120"> <TextBox.Style> <Style TargetType="TextBox"> <Style.Triggers> <Trigger Property="Text" Value="שלום"> <Setter Property="Background" Value="Red" /> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox>
הדוגמא הזו, שהיא טקסטבוקס עם סטייל, מחילה צבע רקע אדום, במידה והמאפיין טקסט של הטקסטבוקס מכיל את הערך "שלום".
זה אולי דוגמה משונה... יותר מצוי דוגמא כזו:<Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Red" /> </Trigger>
אז זה ממש פשוט - שלוש דברים: מאפיין למעקב, ערך רצוי, סטיילים להחלה (Setters).
איפה שלושתם במקרה שלנו? הנה הטריגר מבודד:
המודגש בצהוב זה המאפיין למעקב והערך שאם אכן נמצא יוחל הסטיילים המוגדרים בין מקטעי הטרייגר, במקרה שלנו החלה אחת מוקפת ירוק.במידה והמאפיין למעקב איננו חלק מהאובייקט עליו חל הסטייל, נשתמש בDataTrigger. על כך ועוד סוגים, בימים הקרובים בס"ד.
פורסם במקור בפורום CODE613 ב19/06/2013 18:50 (+03:00)
-
מהו דטה טריגר?
כל טריגר שמאפיין המעקב לא "מקומי". לדוגמא Button שנהיה זמין רק אם TextBox.Text לא ריקה,
אז הButton מכיל סטייל בעל טריגר שעוקב באמצעות דטה טריגר אחרי ערכו של המאפיין Text, המשוייך לאלמנט הTextBox.בדטה טריגר במקום המאפיין Property יש לטריגר רגיל, יש מאפיין Binding.
הוא מקבל ביטוי "בינדינגי" שאנו יכולים להפנות לכל מאפיין שיש לנו גישה אליו, ואחריו הטריגר יעקוב.הנה דוגמא:
<Button Content="Button" HorizontalAlignment="Left" Name="button1" VerticalAlignment="Top" Width="75" Margin="50,50"> <Button.Style> <Style TargetType="Button"> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=textBox1, Path=Text}" Value=""> <Setter Property="IsEnabled" Value="False" /> </DataTrigger> </Style.Triggers> </Style> </Button.Style> </Button> <TextBox Height="23" HorizontalAlignment="Left" Margin="50,80" Name="textBox1" VerticalAlignment="Top" Width="75" />
בדוגמא זו המעקב נעשה מתוך הסטייל של הButton, ואחר המאפיין Text של הTextBox שהובא גם בדוגמא להשלמת התמונה.
פורסם במקור בפורום CODE613 ב24/06/2013 14:00 (+03:00)
-
טריגר עוקב אחר מאפיין אחד בלבד.
מה אם נרצה לתת יותר מתנאי אחד ל"הקפצת" הסגנון?לדוגמא, נרצה לקבוע צבע אדום לTextBox ריקה, בתנאי שאיננה כעת בפוקוס.
אז אנו רוצים שהיא תהיה אדומה אם א. היא ריקה ב. היא איננה בפוקוס כעת.לשם כך יש MultiTrigger. הנה דוגמא:
<Style TargetType="TextBox"> <Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Text" Value="" /> <Condition Property="IsFocused" Value="False" /> </MultiTrigger.Conditions> <MultiTrigger.Setters> <Setter Property="Background" Value="Red" /> </MultiTrigger.Setters> </MultiTrigger> </Style.Triggers> </Style>
כפי שרואים בדוגמא, המולטיטריגר מקבל קבוצת קונידשינים, כאשר כל התנאים נכונים מוקפץ הטריגר וההגרות ה"סטרס" שלו מוחלות.
בנוסף לMultiTrigger שהוא בא לריבוי טריגרים רגילים, יש MultiDataTrigger לריבוי DataTrigger.
פורסם במקור בפורום CODE613 ב25/06/2013 21:40 (+03:00)