Frage

Ich habe einen Verweis auf eine Instanz eines Objekts Storyboard, und will sie nach dem Rahmenelement zu bekommen, dass sie / belebenden angebracht ist. Ich habe nicht in der Lage gewesen, mit irgendeiner Art und Weise, dies zu tun kommen.

Zum Beispiel in der unten stehenden XAML kann gehe ich von einem Verweise auf die Storyboard halten zu erhalten entweder von dem Etikett oder die Grid

<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>

Für diejenigen fragen, warum auf der Erde ich brauche, dies zu tun, ist es, weil ich eine abgeleitete Storyboard-Klasse oder ein angeschlossenes Verhalten zu schaffen versuchen, die ich erlauben, auf dem Datacontext einen Methodennamen angeben aufgerufen werden, wenn die Storyboard abgeschlossen Ereignis ausgelöst wird. Dies ermöglicht es mir eher reine MVVM zu tun, als einige Codes hinter benötigen in meine Ansicht Modell zu nennen.

War es hilfreich?

Lösung

Wenn Sie Ihre XAML zu so etwas wie dies geändert:

<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>

Dies stellt einen x: Name des auf das Gitter und ein Storyboard.Target zum Double. Sie können nun einen Verweis auf das Netz mit diesem Code erhalten:

Storyboard sb = //You mentioned you had a reference to this.
var timeLine = sb.Children.First();
var myGrid = Storyboard.GetTarget(timeLine);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top