Entwickler-Ecke
WPF / Silverlight - Merkwürdiges Verhalten von StaticResource mit Storyboard
maho2nd - Sa 03.01.09 18:54
Titel: Merkwürdiges Verhalten von StaticResource mit Storyboard
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?
Kha - Sa 03.01.09 23:19
Auch wenn die Brush-Referenz bei beiden Styles statisch ist, zeigen sie immer noch auf dasselbe Objekt. Verhindern kannst du das mit x:Shared="false".
maho2nd - So 04.01.09 00:07
Kha hat folgendes geschrieben : |
Auch wenn die Brush-Referenz bei beiden Styles statisch ist, zeigen sie immer noch auf dasselbe Objekt. Verhindern kannst du das mit x:Shared="false". |
ok, danke.
Aber wo muss ich das genau verwenden.
Ich erhalte immer die Fehlermeldung:
Quelltext
1:
| Das freigegebene Attribut im Namespace "http://schemas.microsoft.com/winfx/2006/xaml" kann nur in kompilierten Ressourcenwörterbüchern verwendet werden. |
Kha - So 04.01.09 01:10
Ich dachte eigentlich, ein Blick in die Hilfe würde das klären. Das muss in die Resource, die du nicht sharen willst, also in deinen Brush.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!