Hallo zusammen und ein Gutes Neues nochmal
Ich hab eine ganz kurze Frage, obwohl ich fast schon vermute, dass das so im XAML nicht möglich ist:
Wenn ich direkt im Control eine Property bereits gesetzt habe, also z.B. die
Kann ich die vom Style aus overriden? Also z.B.:
Also quasi so, wie man mit CSS auch HTML overriden kann....
Oder hat jemand eine Idee für ein Workaround, wenn ich nicht in meinem 2.126 Path Controls ( ) überall die Definition der Fill-Property rauslöschen möchte... Ich weiss, das hätte ich mir besser vorher überlegen sollen
____________________________________________________________________________
Edit:
Hatte grad mal wieder einen meiner Geistesblitze. Mit einer Animation geht das:
____________________________________________________________________________
Edit2:
So jetzt muss ich doch nochmal nachhaken:
Hab das mal in mein Projekt eingebaut, bekomme aber dann beim Starten des Programms diesen Fehler:
InvalidOperationException: Diese Storyboard-Zeitleistenstruktur kann nicht für die threadübergreifende Verwendung fixiert werden.
Also hab ich mal recherchiert und das hier gefunden:
stackoverflow.com/questions/21…imation/14164245#14164245
...und dann probiert das umzubauen für meine Bedürfnisse, Betonung auf "probiert" :
Spoiler anzeigen
Spoiler anzeigen
Aber bekomme immer noch den gleichen Fehler. Hat jemand vielleicht ne Idee was ich falsch mache? Oder kann mir zumindest den Code ein bisschen erklären, weil so 100%ig versteh ich das nicht....
Ich hab eine ganz kurze Frage, obwohl ich fast schon vermute, dass das so im XAML nicht möglich ist:
Wenn ich direkt im Control eine Property bereits gesetzt habe, also z.B. die
Fill
-Property...:Kann ich die vom Style aus overriden? Also z.B.:
Also quasi so, wie man mit CSS auch HTML overriden kann....
Oder hat jemand eine Idee für ein Workaround, wenn ich nicht in meinem 2.126 Path Controls ( ) überall die Definition der Fill-Property rauslöschen möchte... Ich weiss, das hätte ich mir besser vorher überlegen sollen
____________________________________________________________________________
Edit:
Hatte grad mal wieder einen meiner Geistesblitze. Mit einer Animation geht das:
XML-Quellcode
- <Style TargetType="{x:Type Path}">
- <Style.Triggers>
- <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Border}}, Path=IsMouseOver}" Value="True">
- <DataTrigger.EnterActions>
- <BeginStoryboard>
- <Storyboard>
- <ColorAnimation Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" From="White" To="Red" Duration="0"/>
- </Storyboard>
- </BeginStoryboard>
- </DataTrigger.EnterActions>
- <DataTrigger.ExitActions>
- <BeginStoryboard>
- <Storyboard>
- <ColorAnimation Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" From="Red" To="White" Duration="0"/>
- </Storyboard>
- </BeginStoryboard>
- </DataTrigger.ExitActions>
- </DataTrigger>
- </Style.Triggers>
- </Style>
____________________________________________________________________________
Edit2:
So jetzt muss ich doch nochmal nachhaken:
Hab das mal in mein Projekt eingebaut, bekomme aber dann beim Starten des Programms diesen Fehler:
InvalidOperationException: Diese Storyboard-Zeitleistenstruktur kann nicht für die threadübergreifende Verwendung fixiert werden.
Also hab ich mal recherchiert und das hier gefunden:
stackoverflow.com/questions/21…imation/14164245#14164245
...und dann probiert das umzubauen für meine Bedürfnisse, Betonung auf "probiert" :
XML-Quellcode
- <Style TargetType="{x:Type Path}">
- <Setter Property="Stretch" Value="None"/>
- <Setter Property="Tag" Value="White"/>
- <Setter Property="Fill">
- <Setter.Value>
- <MultiBinding Converter="{StaticResource MultiplyConverter}">
- <Binding Path="Fill" RelativeSource="{RelativeSource Self}"/>
- <Binding Path="Tag" RelativeSource="{RelativeSource Self}"/>
- </MultiBinding>
- </Setter.Value>
- </Setter>
- <Style.Triggers>
- <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Border}}, Path=IsMouseOver}" Value="True">
- <DataTrigger.EnterActions>
- <BeginStoryboard>
- <Storyboard>
- <ColorAnimation Storyboard.TargetProperty="(Path.Tag).(SolidColorBrush.Color)" From="{DynamicResource Vordergrundfarbe}" To="Red" Duration="0"/>
- </Storyboard>
- </BeginStoryboard>
- </DataTrigger.EnterActions>
- <DataTrigger.ExitActions>
- <BeginStoryboard>
- <Storyboard>
- <ColorAnimation Storyboard.TargetProperty="(Path.Tag).(SolidColorBrush.Color)" From="Red" To="{DynamicResource Vordergrundfarbe}" Duration="0"/>
- </Storyboard>
- </BeginStoryboard>
- </DataTrigger.ExitActions>
- </DataTrigger>
- </Style.Triggers>
- </Style>
VB.NET-Quellcode
- Public Class MultiplyConverter
- Implements IMultiValueConverter
- Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
- Dim result As String = "White"
- For i = 0 To values.Length - 1
- If TypeOf values(i) Is String Then
- result = DirectCast(values(i), String)
- End If
- Next
- Return result
- End Function
Aber bekomme immer noch den gleichen Fehler. Hat jemand vielleicht ne Idee was ich falsch mache? Oder kann mir zumindest den Code ein bisschen erklären, weil so 100%ig versteh ich das nicht....
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kafffee“ ()