Анимация UserControl - PullRequest
       35

Анимация UserControl

0 голосов
/ 18 октября 2019

Я сделал анимацию непрозрачности, используя Blend на одном из моих двух UserControls, удалил <UserControl.Resources>, <UserControl.Triggers> и Storyboard.TargetName из этого, поместил его в App.xaml и он выглядит так:

<Storyboard x:Key="Loaded">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" >
        <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
        <EasingDoubleKeyFrame KeyTime="0:0:3" Value="1"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

, когда я вызываю его в коде, подобном этому, перед установкой Content моего ContentControl:

Storyboard sb = FindResource("Loaded") as Storyboard;
sb.begin(uc1);
content.Content = uc1;

//and

Storyboard sb = FindResource("Loaded") as Storyboard;
sb.begin(uc2);
content.Content = uc2;

, он работает как положено. Для анимации преобразования я удалил TransformGroup в дополнение к вышеперечисленным, и теперь он выглядит следующим образом:

<Storyboard x:Key="Unloaded">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
        <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
        <EasingDoubleKeyFrame KeyTime="0:0:3" Value="-800"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

Если я вызываю его таким же образом, я получаю эту ошибку:

System.InvalidOperationException: ''[Unknown]' property does not point to a DependencyObject in path '(0).(1)[3].(2)'.'

Как решить проблему?

1 Ответ

2 голосов
/ 18 октября 2019

Вам необходимо добавить RenderTransform к вашему UserControl, который похож на Storyboard.TargetProperty, который в настоящее время ожидает TransformGroup с четвертым дочерним элементом как TranslateTransform.

Добавьте приведенный ниже код к каждому из ваших двух UserControls:

<UserControl x:Class="YourUserControl"
        ...>

    <UserControl.RenderTransform>
        <TransformGroup>
            <RotateTransform/>
            <ScaleTransform/>
            <SkewTransform/>
            <TranslateTransform/>
        </TransformGroup>
    </UserControl.RenderTransform>
...