oloque o storyboard nos recursos do aplicati

Eu preciso usar o mesmo storyboard em vários lugares, portanto, coloquei o storyboard dentro do meu Application.Resources. Quando tento executar o storyboard, o único problema é que preciso fazer referência ao destino que quero animar. Aqui está o meu storyboard:

    <System:String x:Key="target">border2</System:String>
    <Storyboard x:Key="stHeight">
        <DoubleAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(FrameworkElement.Height)" 
            Storyboard.TargetName="{DynamicResource target}"> 
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="90">
                <EasingDoubleKeyFrame.EasingFunction>
                    <CircleEase EasingMode="EaseOut"/>
                </EasingDoubleKeyFrame.EasingFunction>
            </EasingDoubleKeyFrame>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>

A maneira como animar a altura de um objeto diferente é alterando o destino do recurso dinâmico. Consegui fazer isso quando o storyboard estava na janela atual. Mas agora que quero colocá-lo nos recursos do aplicativo, não sei como fazer referência à propriedade de destino.

EDITA

A solução que publiquei anteriormente funciona bem, mas às vezes é difícil criar animações complexas com código. então outra solução alternativa que trabalhei foi criar o storyboard com mistura de expressões. então eu arrasto um controle aleatório para a janela principal na mistura de expressões e crio uma animação aleatória. digamos que a animação saia como:

         <Storyboard x:Key="Storyboard1">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="grid">
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="90"/>
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="grid">
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="103"/>
            </DoubleAnimationUsingKeyFrames>
            <PointAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)" Storyboard.TargetName="grid">
                <EasingPointKeyFrame KeyTime="0:0:1" Value="0.75,0.5"/>
            </PointAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" Storyboard.TargetName="grid">
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="75"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>

, copio esse código e colo-o na minha janela de trabalho, NÃO NO APP.XAM

e, no meu código, digamos que eu tenho um:

<Border Name="brdBorder" BorderBrush="Silver" BorderThickness="1" Margin="328,104,0,0"  Background="#FFE52E2E" HorizontalAlignment="Left" Width="94" Height="100" VerticalAlignment="Top" >
    <Border.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </Border.RenderTransform>
</Border>

por algum motivo, o grupo de transformação precisa estar lá para animar o objeto. de qualquer forma, digamos que eu tenha esse pensionista na minha janela de trabalho e desejo animá-lo com a mesma animação que criei com a mistura de expressões. o que farei no código é:

Storyboard sb1 = FindResource("Storyboard1") as Storyboard;

foreach (var child in sb1.Children)
{
    Storyboard.SetTargetName(child, brdBorder.Name);
}

sb1.Begin(this);

e então eu posso animar essa borda na minha janela de trabalho. A parte boa disso é que sou capaz de aplicar a mesma animação a vários objetos (acho que é esse o objetivo de criar um recurso). O problema surge quando tento colocar o storyboard em um dicionário de recursos ou no app.xaml Arquivo. quando faço isso, o c # é capaz de encontrar o storyboard, mas as propriedades do storyboard são somente leitura, portanto, recebo o erro:

Cannot set a property on object 'System.Windows.Media.Animation.DoubleAnimationUsingKeyFrames' because it is in a read-only state.

A razão pela qual eu queria fazer isso é aplicar a mesma animação a vários objetos. Uma solução alternativa foi criar a animação básica com código e, em seguida, a animação mais complexa, como a função de facilitação, etc., salvá-la como um recurso. Deixe-me mostrar o que eu quero dizer.

No meu arquivo de recursos, coloquei o seguinte recurso:

   <EasingDoubleKeyFrame x:Key="pleaseWork">
        <EasingDoubleKeyFrame.EasingFunction >
            <BackEase EasingMode="EaseOut" Amplitude="1"/>
        </EasingDoubleKeyFrame.EasingFunction>
    </EasingDoubleKeyFrame>

Em mistura de expressão, você pode criar uma função de facilidade mais complexa. Depois, com o código por trás, criarei um storyboard básico:

DoubleAnimation animation = new DoubleAnimation();
            animation.To = 336;   // final value
            //animation.From = 0;
            //animation.BeginTime = TimeSpan.FromSeconds(0); 
            animation.Duration = new Duration(TimeSpan.FromSeconds(5)); // how much time should animation last
            // here comes the magic:
            // note that I can bind to EasingDoubleKeyFrame in my resource file in xaml
            animation.EasingFunction = ((EasingDoubleKeyFrame)FindResource("pleaseWork")).EasingFunction; // apply the easing function 
            Storyboard.SetTarget(animation, groupBox1);  // what object will be animated?
            Storyboard.SetTargetProperty(animation, new PropertyPath(FrameworkElement.HeightProperty)); // what property will be animated

            Storyboard sb = new Storyboard();
            sb.Children.Add(animation);
            sb.Begin();

sso me permitiu usar o mesmo storyboard em vários objeto

questionAnswers(3)

yourAnswerToTheQuestion