C # Оживление выравнивания - возможно? - PullRequest
1 голос
/ 12 сентября 2011

возможно ли создать анимацию c # для AttachedPropertys, например Alignment? Может быть, 1 секунда Перемещение между изменением с HorizontalAlignment.Left на HorizontalAlignment.Right - это возможно?

Большое спасибо.

Ответы [ 3 ]

1 голос
/ 12 сентября 2011

Вы не можете анимировать это в смысле создания плавной анимации, где что-то скользит слева направо, поскольку они являются дискретными состояниями. Между ними нет промежуточных значений. Можно создать «анимацию», которая меняет выравнивание в некоторой точке слева направо, она просто не будет скользить. Вы также можете проделать большую работу и измерить все элементы управления, чтобы вручную создать анимацию, которая перемещает что-либо с одной стороны экрана на другую, используя такие вещи, как Canvas.Left или поля для позиционирования элементов управления.

Прикрепленная часть свойства не является проблемой, просто используйте полное имя присоединенного свойства в части целевого свойства вашей анимации.

0 голосов
/ 21 сентября 2017

Возможно, вот пример:

class StoryBoardManager : System.Windows.Media.Animation.Storyboard
{
    public void ChangeRectangleAlignment(DependencyObject target, VerticalAlignment verticalAlignment, HorizontalAlignment horizontalAlignment, int BeginTimeMillisecond)
    {
        ObjectAnimationUsingKeyFrames objectAnimation = new ObjectAnimationUsingKeyFrames()
        {
            BeginTime = TimeSpan.FromMilliseconds(0)
        };
        Storyboard.SetTarget(objectAnimation, target);
        Storyboard.SetTargetProperty(objectAnimation, new PropertyPath("(FrameworkElement.HorizontalAlignment)"));
        DiscreteObjectKeyFrame keyFrame = new DiscreteObjectKeyFrame(horizontalAlignment, TimeSpan.FromMilliseconds(BeginTimeMillisecond));
        objectAnimation.KeyFrames.Add(keyFrame);
        this.Children.Add(objectAnimation);
    }
}

Для получения дополнительной информации см. этот другой вопрос .

0 голосов
/ 11 марта 2015

Хотя невозможно напрямую плавно анимировать между двумя свойствами, такими как

HorizontalAlignment="Right" VerticalAlignment="Bottom"

до

HorizontalAlignment="Center" VerticalAlignment="Center"

, я нашел способ сделать это для приложения таким образом,я подумал, что стоит поделиться.Я просто поместил элемент управления в сетку, которая заняла всю панель окна.Я выровнял элемент управления в правом нижнем углу сетки.Затем я анимировал сетку, чтобы преобразовать и уменьшить угол, который мне нужен, до точки, в которой я тоже хочу выровнять элемент управления (в центре в этом примере. См. Полный код ниже.

<Grid Margin="5,5,14,70" Visibility="{Binding Path=AdminModeIsEnabled, Converter={StaticResource CollapsedVisibilityConverter}, FallbackValue=Visible}">
    <Grid.Style>
        <Style TargetType="Grid">
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <ScaleTransform/>
                </Setter.Value>
            </Setter>
            <Setter Property="RenderTransform">
                <Setter.Value>
                    <ScaleTransform/>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding CenterPanel}" Value="True">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="(LayoutTransform).(ScaleTransform.ScaleY)" To="2" Duration="0:0:0.5" />
                                <DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleY)" To=".5" Duration="0:0:0.5" />
                                <DoubleAnimation Storyboard.TargetProperty="(LayoutTransform).(ScaleTransform.ScaleX)" To="2" Duration="0:0:0.5" />
                                <DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleX)" To=".5" Duration="0:0:0.5" />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                    <DataTrigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="(LayoutTransform).(ScaleTransform.ScaleY)" To="1" Duration="0:0:0.5" />
                                <DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleY)" To="1" Duration="0:0:0.5" />
                                <DoubleAnimation Storyboard.TargetProperty="(LayoutTransform).(ScaleTransform.ScaleX)" To="1" Duration="0:0:0.5" />
                                <DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleX)" To="1" Duration="0:0:0.5" />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.ExitActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Grid.Style>
    <Image Height="15" Source="\Images\Test.png" HorizontalAlignment="Right" VerticalAlignment="Bottom" />
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...