Entwickler-Ecke
WPF / Silverlight - Eine Frage zur ChangePropertyAction
FrEEzE2046 - Sa 11.12.10 15:46
Titel: Eine Frage zur ChangePropertyAction
Hallo,
ich schreibe gerade einen WPF- in einen Silverlight-Style um. Besser gesagt, ich versuche es. Um das Problem am leichtesten zu beschreiben, hier mal folgendes Beispiel:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Grid> <Ellipse x:Name="MyEllipse"> <Ellipse.Fill> <SolidColorBrush Color="Red"/> </Ellipse.Fill> </Ellipse> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="MyEllipse" Property="Fill"> <Setter.Value> <SolidColorBrush Color="Blue"/> </Setter.Value> </Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
<Style x:Key="MyButtonStyle" TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid> <Ellipse x:Name="MyEllipse"> <Ellipse.Fill> <SolidColorBrush Color="Red"/> </Ellipse.Fill> </Ellipse> <i:Interaction.Triggers> <i:EventTrigger EventName="MouseMove"> <ic:ChangePropertyAction TargetName="MyEllipse" PropertyName="Fill" IsEnabled={Binding IsMouseOver}> <ic:ChangePropertyAction.Value> <SolidColorBrush Color="Blue"/> </ic:ChangePropertyAction.Value> </ic:ChangePropertyAction> </i:EventTrigger> </i:Interaction.Triggers> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> |
Also, ganz einfach: Einfache Ellipse mit roter Füllfarbe. Während die Maus über dem Button ist, soll die Füllfarbe blau sein, sonst wieder rot.
Nun gelingt es mir zwar mit dem Code oben die Füllfarbe auf blau zu ändern, sobald die Maus darüber ist, jedoch möchte ich den Wert auch wieder auf "default" zurücksetzen.
Wenn es sich nur um diese Füllfarbe handeln würde, könnte ich die MouseEnter und MouseLeave Events dafür benutzen. Da mein Code jedoch weitaus größer ist (in der Action passiert wesentlich mehr), ist das keine Option.
Wie kann man das am elegantesten lösen und warum funktioniert mein Binding auf "IsEnabled" nicht?
Vielen Dank vorab!
Kha - Sa 11.12.10 15:53
Warum keine Visual States? Die Dinger sind so viel einfacher und eleganter als Trigger (vor allem zusammen mit Blend), dass WPF sie inzwischen sogar übernommen hat :) .
FrEEzE2046 - Sa 11.12.10 17:33
Kha hat folgendes geschrieben : |
| Warum keine Visual States? Die Dinger sind so viel einfacher und eleganter als Trigger (vor allem zusammen mit Blend), dass WPF sie inzwischen sogar übernommen hat :) . |
Hi und danke für deine Antwort. Ich hab mich mit dem VisualStateManager leider überhaupt noch nicht auseinander gesetzt. Ich bin zwar dem nicht abgeneigt, aber ich hab für die Umsetzung nicht mehr viel Zeit.
Hättest du evtl. ein Code-Beispiel, wie es mit Visual States für dieses sehr einfache Beispiel aussehen würde? Wäre wirklich super, wenn's nicht zu viel Arbeit für dich ist.
Kha - Sa 11.12.10 17:39
Mein einziger VSM-Code befindet sich leider bei meiner ehemaligen Praktikumsstelle, die Einzelheiten müsste ich auch erst einmal wieder nachschlagen - oder doch mal Blend installieren, damit sind es ein paar Klicks ;) .
FrEEzE2046 - Sa 11.12.10 19:43
Kha hat folgendes geschrieben : |
| Mein einziger VSM-Code befindet sich leider bei meiner ehemaligen Praktikumsstelle, die Einzelheiten müsste ich auch erst einmal wieder nachschlagen - oder doch mal Blend installieren, damit sind es ein paar Klicks ;) . |
So, ich hab's mit Blend jetzt hinbekommen. Ist wirklich kinderleicht ;) Danke dir.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!