Hallo zusammen,
Ich habe in meinem Projekt einen DataGrid. In diesem habe ich 3 Ebenen über eine ObservableCollection. In den Rowdetails zeige ich jeweils die untergeordnete DatGrid an, die Daten zum übergeordneten Datensatz zeigt. Nun hätte ich gern in den Rowheadern einen Animierten Pfeil, der sich dreht, wenn die Rowdetails aufgerufen werden. Nur ich schaffe es nicht das Storyboard richtig zu implementieren. Ich hab jetzt schon etliche Google Ergebnisse durch, aber ich finde nichts, das mich weiter bringt. Ich möchte das ohne Code behind lösen.
Und was ist Deine Frage? Was hast Du bisher versucht? Code zeigen?
Bitte nicht erwarten, dass das Forum für Dich den Quellcode generiert.
[Hinweis] Wie poste ich richtig?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Entschuldigung
Ich habe bereits versucht das Storyboard über einen Datatrigger im DataGrid.RowHeaderStyle (1) aufzurufen ,über ein DataGrid.RowHeaderTemplate(2). Beides schlug fehl mit einem Vermerk, dass ein TargetName nicht erlaubt ist in einem Style.. Des weiteren habe ich versucht einen Button einzusetzen und dort über Find Ancestor den Button bei einem Rowselect zu drehen, allerdings habe ich diesen Code komplett entsorgt..
Code zu 1
<DataGrid.RowHeaderStyle >
<Style TargetType="DataGridRowHeader">
<Setter Property="Background" Value="#302E2F"/>
<Setter Property="BorderBrush" Value="#E04D0D"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Width" Value="25"/>
<Style.Triggers>
<Trigger Property="IsRowSelected" Value="True" >
<Setter Property="Content">
<Setter.Value>
<DockPanel Width="20" Height="20" >
<svgc:SvgViewbox
HorizontalAlignment="Center" VerticalAlignment="Top"
Margin="4"
Source="/Assets/Icons/down-arrow.svg"
DockPanel.Dock="Top"
RenderTransformOrigin="0.5,0.5">
<svgc:SvgViewbox.RenderTransform>
<RotateTransform x:Name="AnimatedRotateTransform" Angle="0" />
</svgc:SvgViewbox.RenderTransform>
</svgc:SvgViewbox>
</DockPanel>
</Setter.Value>
</Setter>
<Setter Property="VerticalContentAlignment" Value="Top"/>
<Setter Property="BorderThickness" Value="2"/>
</Trigger>
<EventTrigger RoutedEvent="DataGridRow.Selected">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="AnimatedRotateTransform"
Storyboard.TargetProperty="Angle"
To="360" Duration="0:0:1" FillBehavior="Stop" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowHeaderStyle>
Code zu 2
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<DockPanel Width="20" Height="20" >
<svgc:SvgViewbox
HorizontalAlignment="Center" VerticalAlignment="Top"
Margin="4"
Source="/Assets/Icons/down-arrow.svg"
DockPanel.Dock="Top"
RenderTransformOrigin="0.5,0.5"
x:Name="ArrowView">
<svgc:SvgViewbox.RenderTransform>
<RotateTransform Angle="0" />
</svgc:SvgViewbox.RenderTransform>
<svgc:SvgViewbox.Style>
<Style>
<Style.Triggers>
<EventTrigger RoutedEvent="DataGridRow.Selected">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="AnimatedRotateTransform"
Storyboard.TargetProperty="Angle"
To="360" Duration="0:0:1" FillBehavior="Stop" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</svgc:SvgViewbox.Style>
</svgc:SvgViewbox>
</DockPanel>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
und dir Frage ist natürlich -> Wie muss ich`s anstellen, dass es klappt...
Hier noch die Fehlermeldung:
Schau mal in Wpf: Storyboard.TargetName works, but Setter TargetName doesn’t, ob dir das weiterhilft.
Nein, das führt leider zu keiner Lösung.