Domanda

Ho un riferimento a un'istanza di un oggetto Storyboard e desidero acquisire l'elemento Framework a cui è collegato / animare. Non sono stato in grado di trovare alcun modo per farlo.

Ad esempio, nella XAML in basso, posso passare da un riferimento allo Storyboard per ottenere l'etichetta o la griglia

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

Per coloro che si chiedono perché mai devo farlo, è perché sto cercando di creare una classe Storyboard derivata o un comportamento collegato che mi consentirà di specificare un nome metodo su DataContext da chiamare quando lo Storyboard è stato completato incendi di eventi. Questo mi permetterà di fare MVVM puro piuttosto che avere bisogno di un po 'di codice per chiamare il mio View Model.

È stato utile?

Soluzione

Se hai cambiato il tuo XAML in qualcosa del genere:

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

Questo introduce un nome x: alla griglia e uno Storyboard. Obiettivo a DoubleAnimation. Ora puoi ottenere un riferimento alla griglia con questo codice:

Storyboard sb = //You mentioned you had a reference to this.
var timeLine = sb.Children.First();
var myGrid = Storyboard.GetTarget(timeLine);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top