Hallo,
da ich in meiner XAML eine Farbe mehrmals Verwende definiere ich diese am Anfang global:
XML-Daten
1: 2: 3:
| <SolidColorBrush x:Key="style_brush1">#FF858585</SolidColorBrush> <Color x:Key="style_color1">#FF858585</Color> <Color x:Key="style_color5">#FFFFB400</Color> |
nun habe ich z.B. einen Style A:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| <Style x:Key="checkBoxMainWindow" BasedOn="{x:Null}" TargetType="{x:Type CheckBox}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Grid Margin="0,0,0,0"> <Viewbox Stretch="Fill"> <Grid Width="40" Height="80"> <Rectangle x:Name="path" Fill="{StaticResource style_brush1}" RadiusX="4" RadiusY="4"/> </Grid> </Viewbox> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> |
und einen Style B welcher noch ein Hover-Trigger mit Storyboard:
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:
| <Style x:Key="buttonStop" TargetType="{x:Type CheckBox}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type CheckBox}"> <ControlTemplate.Resources> <Storyboard x:Key="mouseIn"> <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="stop" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> <SplineColorKeyFrame KeyTime="00:00:00" Value="{StaticResource style_color1}"/> <SplineColorKeyFrame KeyTime="00:00:00.1250000" Value="{StaticResource style_color5}"/> </ColorAnimationUsingKeyFrames> </Storyboard> </ControlTemplate.Resources> <Grid Width="80" Height="80"> <Rectangle x:Name="stop" Margin="22,22,22,22" Fill="{StaticResource style_brush1}" StrokeThickness="1"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Trigger.EnterActions> <BeginStoryboard Storyboard="{StaticResource mouseIn}"/> </Trigger.EnterActions> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> |
wenn ich nun den Style A auf ein Control 1 anwende und den Style B auf ein Control 2 so existiert der merkwürdige Effekt, dass wenn ich über Control 2 mit der Maus darüberfahre es den Hover-Effekt gibt aber
gleichzeitig auch auf Control 1 !
Als würde sozusagen das Control 1 das Storyboard von Control 2 übernehmen nur weil in beiden Styles das gleiche Static-Resource auf eine Farbe definiert ist.
Dies ist aber nur der Fall wenn im Style beide die gleiche StaticResource Fill="{StaticResource style_brush1}" zugewiesen ist. Wenn sie unterschiedliche StaticRessourcen zugewiesen bekommen funktioniert es. Ändere ich auf Dynamic-Resource um, so funktioniert es auch korrekt. Jedoch benötige ich für manche Dinge unbedingt static.
Kann jemand den komsiche Effekt erklären und wie man den umgehen kann?