Как изменить размер от центра элемента? - PullRequest
1 голос
/ 22 февраля 2011

Я хочу показать новое окно с анимацией, увеличивающей размер с 0 до 300. В событие Loaded я вставил следующий код:

DoubleAnimation heightAnim = new DoubleAnimation(0,300,TimeSpan.FromSeconds(1));
BeginAnimation(HeightProperty,heightAnim);

DoubleAnimation WidthAnim = new DoubleAnimation(0,300,TimeSpan.FromSeconds(1));
BeginAnimation(WidthProperty,WidthAnim);

Этот код работает нормально.Но строительство начинается в верхнем левом углу окна и расширяется вправо и вниз, пока не достигнет размера 300 * 300.Я хочу, чтобы это началось с центра и расширилось оттуда ко всем 4 сторонам.Как я могу это сделать?

ps после попытки ответить Jogy , я понял, что, возможно, лучший способ получить этот эффект - применять анимацию к ScaleX и ScaleY вместо применения анимации к размеру окна,Потому что при анимации по размеру окна пользователь будет видеть только часть контента, пока он не достигнет полного размера.Что ты думаешь о ?Какой подход лучше?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Чтобы получить этот эффект, я понял, что лучше использовать ScaleTransform.В случае Loaded код должен выглядеть следующим образом:

ScaleTransform scaleTransform = new ScaleTransform();

«сетка» - это элемент под окном, а для HorizontalElignment и VerticalElignment установлено значение «Центр»

grid.LayoutTransform = scaleTransform;

DoubleAnimation heightAnim = new DoubleAnimation(0,1,TimeSpan.FromSeconds(1));
scaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty,heightAnim);

DoubleAnimation WidthAnim = new DoubleAnimation(0,1,TimeSpan.FromSeconds(1));
scaleTransform.BeginAnimation((ScaleTransform.ScaleXProperty,WidthAnim);
1 голос
/ 22 февраля 2011

Добавьте еще две анимации для свойств Top и Left, например:

  DoubleAnimation topAnim = new DoubleAnimation(this.Top, this.Top - 150, TimeSpan.FromSeconds(1));
  BeginAnimation(TopProperty, topAnim);

  DoubleAnimation leftAnim = new DoubleAnimation(this.Left, this.Left - 150, TimeSpan.FromSeconds(1));
  BeginAnimation(LeftProperty, leftAnim);

Вы также можете синхронизировать анимации, поместив их в раскадровку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...