Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Как плавно анимировать положение LayoutRoot?


Автор: Dims 25.1.2011, 20:18
Хотел, чтобы у меня плавно сдвинулось влево всё содержимое окна, сделал как обычно в Expression Blend визуальными средствами, получилось вот что:

Код

                 <Storyboard x:Name="ShiftLeft">
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="LayoutRoot">
                <DiscreteObjectKeyFrame KeyTime="0:0:2">
                    <DiscreteObjectKeyFrame.Value>
                        <Thickness>-240,-240,0,0</Thickness>
                    </DiscreteObjectKeyFrame.Value>
                </DiscreteObjectKeyFrame>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>


то есть, скачкообразное изменение свойств.

Как переделать на плавное?

Автор: vikaz 25.1.2011, 20:29
У меня в ExBlend получилось вот так!
Код

<Storyboard x:Key="OnLoaded1">
            <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="LayoutRoot">
                <EasingThicknessKeyFrame KeyTime="0" Value="0"/>
                <EasingThicknessKeyFrame KeyTime="0:0:2" Value="-335,0,335,0"/>
            </ThicknessAnimationUsingKeyFrames>
        </Storyboard>

Автор: Dims 26.1.2011, 18:47
У меня такое вообще не работает, говорит

ThicknessAnimationUsingKeyFrames does not exist in the namespace "http://schemas.microsoft.com/client/2007

Автор: vikaz 26.1.2011, 20:24
Все может быть, так как у меня Expression Blend 4. Вкратце, у Вас возникла такая проблема из-за того, что Вы не зафиксировали первое значение, которое является нулевым. Но даже добавив нудевое значение к Вашему коду, он так и изменял значения скачкообразно. А у Вас какой Expression Blend ?

ЗЫ. ThicknessAnimationUsingKeyFrames - берет начало от .NET 3.0. Так что странно, что у Вас возникла ошибка.....

Автор: Dims 26.1.2011, 21:36
У меня тоже 4-й. Мож какой референс нужен?

Добавлено через 5 минут и 25 секунд
System.Windows.Media.Animation не могу найти в референсах, не могу добавить. Может, потому что отфильтровано для Силверлайт 4?

Автор: vikaz 26.1.2011, 22:07
Цитата(Dims @  26.1.2011,  23:36 Найти цитируемый пост)

System.Windows.Media.Animation не могу найти в референсах, не могу добавить. Может, потому что отфильтровано для Силверлайт 4? 

Конечно! Silverlight ничего не знает о ThicknessAnimationUsingKeyFrames.  smile

Добавлено через 39 секунд
ЗЫ. О том, под что пишите, надо говорить в самом начале. Не было бы таких долгих разбирательств! smile

Автор: Dims 27.1.2011, 16:56
Окей, я просто не подумал, что Expression Blend позволяет писать и под WPF...

Так вопрос остаётся....

Добавлено через 1 минуту и 7 секунд
Можно ли LayoutRoot передвинуть по тому же принципу, что и любой объект?

Добавлено через 9 минут и 12 секунд
Видимо, можно...

Автор: Dims 28.1.2011, 14:06
Можно, но работает плохо -- есть немотивированное поведение.

Автор: exBlender 28.1.2011, 20:00
А зачем двигать именно LayoutRoot? В него можно поместить любой лейаут-контейнер с контентом и двигать этот контейнер.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)