Pergunta

Eu tenho uma referência a uma instância de um objeto de Storyboard, e quer se apossar do elemento Framework que está ligado a / animação. Eu não tenho sido capaz de chegar a qualquer forma de fazer isso.

Por exemplo, no XAML abaixo, posso ir de uma referência para o Storyboard para se apossar de qualquer rótulo ou da grade

<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 aqueles que querem saber por que diabos eu preciso fazer isso, é porque eu estou tentando criar uma classe Storyboard derivado ou um comportamento anexado que me permite especificar um nome de método no DataContext para ser chamado quando o Storyboard completou evento é acionado. Isso permitirá que eu faça MVVM pura ao invés de precisar de algum código por trás de chamada em minha vista do modelo.

Foi útil?

Solução

Se você mudou de XAML para algo como isto:

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

Isto introduz um x: Name para a grade e uma Storyboard.Target ao DoubleAnimation. Agora você pode obter uma referência para a grade com este código:

Storyboard sb = //You mentioned you had a reference to this.
var timeLine = sb.Children.First();
var myGrid = Storyboard.GetTarget(timeLine);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top