Question

J'ai une référence à une instance d'un objet Storyboard et je souhaite obtenir l'élément Framework auquel il est attaché / animating. Je n'ai pas été en mesure de trouver un moyen de le faire.

Par exemple, dans le XAML ci-dessous, puis-je passer d'une référence au storyboard pour obtenir soit le libellé, soit la grille

<Grid>
    <Grid.Resources>
        <Storyboard x:Key="myStoryboard">
            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:5"/>
        </Storyboard>
        <Style x:Key="myStyle" TargetType="{x:Type Label}">
            <Style.Triggers>
                <DataTrigger 
                 Binding="{Binding Path=StartAnimation}" Value="true">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource myStoryboard}" />                            
                    </DataTrigger.EnterActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Grid.Resources>
    <Label x:Name="labelHello" Grid.Row="0" Style="{StaticResource myStyle}">Hello</Label>
</Grid>

Pour ceux qui se demandent pourquoi je dois faire cela, c'est parce que j'essaie de créer une classe Storyboard dérivée ou un comportement attaché qui me permettra de spécifier un nom de méthode sur le DataContext à appeler lorsque le Storyboard sera terminé. événements d'incendie. Cela me permettra de faire du MVVM pur plutôt que d’avoir besoin de code derrière pour pouvoir appeler mon modèle de vue.

Était-ce utile?

La solution

Si vous avez modifié votre code XAML en un nom comme celui-ci:

<Grid x:Name="grid">
    <Grid.Resources>
        <Storyboard x:Key="myStoryboard">
            <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:5" Storyboard.Target="{Binding ElementName = grid}"/>
        </Storyboard>
        <Style x:Key="myStyle" TargetType="{x:Type Label}">
            <Style.Triggers>
                <DataTrigger 
                 Binding="{Binding Path=StartAnimation}" Value="true">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource myStoryboard}" />                            
                    </DataTrigger.EnterActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Grid.Resources>
    <Label x:Name="labelHello" Grid.Row="0" Style="{StaticResource myStyle}">Hello</Label>
</Grid>

Ceci introduit un x: Name dans la grille et un Storyboard.Target dans DoubleAnimation. Vous pouvez maintenant obtenir une référence à la grille avec ce code:

Storyboard sb = //You mentioned you had a reference to this.
var timeLine = sb.Children.First();
var myGrid = Storyboard.GetTarget(timeLine);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top