Pregunta

Tengo una referencia a una instancia de un objeto Storyboard, y quiero obtener el elemento Framework al que está adjunto / animar. No he podido encontrar ninguna forma de hacerlo.

Por ejemplo, en el XAML a continuación, ¿puedo pasar de una referencia al Guión gráfico para obtener la etiqueta o la cuadrícula

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

Para aquellos que se preguntan por qué demonios necesito hacer esto, es porque estoy tratando de crear una clase de Storyboard derivada o un comportamiento adjunto que me permita especificar un nombre de método en el DataContext que se llamará cuando se complete el Storyboard evento de incendios. Esto me permitirá hacer MVVM puro en lugar de necesitar un código detrás para llamar a mi Modelo de vista.

¿Fue útil?

Solución

Si cambiaste tu XAML a algo como esto:

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

Esto introduce una x: Nombre en la cuadrícula y un Guión gráfico. Diríjase a DoubleAnimation. Ahora puede obtener una referencia a la cuadrícula con este código:

Storyboard sb = //You mentioned you had a reference to this.
var timeLine = sb.Children.First();
var myGrid = Storyboard.GetTarget(timeLine);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top