анимация поворота элемента управления до значения привязки к пользовательскому объекту - PullRequest
0 голосов
/ 26 ноября 2010

Этот проект находится в c # в .net 4.

У меня есть пользовательский объект, который меняет значение очень часто.Элемент управления UI должен отражать последнее состояние - поэтому я пытаюсь использовать привязки, но не могу его подключить.

Я хочу, чтобы элемент управления замечал, когда значение объекта изменяется (связывание?), а затем анимировать (Раскадровка?) новое значение в течение 1/2 с или около того.Это зависит от направления, поэтому, если старое значение было 340 градусов, а новое - 15 градусов, я не хочу, чтобы оно вращалось вокруг «длинного пути», поэтому потребуется некоторая логика для анимации где-то.

В идеале все этой детали анимации должны быть в пользовательском интерфейсе (xaml) - мой объект, который обновляется, не хочет знать о деталях пользовательского интерфейса.Инструменты в Blend4 не подходят для работы, и мой хакерский ход в xaml идет очень медленно ...

Должен ли я иметь другой объект, который прослушивает изменения в моем исходном объекте и затем настраиваетанимация каждый раз?Должно ли это быть все в xaml?«Реальный» код?

Кто-нибудь знает правильный подход, чтобы принять здесь?Или может указывать на то, что кто-то написал что-то похожее?Я занимаюсь этим уже два дня!

1 Ответ

0 голосов
/ 29 июня 2011

Перейдя назад и вперед в отношении ответственности за анимацию, страха перед дизайнерами, вставляющими код в blend и фактически заставляющими его работать, я (временно) пришел к какому-то решению ...

это вызывается в MainWindow.xaml.cs при запуске:

private void initialiseCustomAnimations()
{

    compassRoseAnimation = new DoubleAnimation();
    compassRoseAnimation.Duration = new Duration(TimeSpan.FromSeconds(2));
    navigationData.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(navigationData_PropertyChanged);

}

и это мужество (где CompassWithNumbersControl - это холст, созданный в смеси):

private void navigationData_PropertyChanged(object sender, EventArgs e)
{
    compassRoseAnimation.From = navigationData.previousHeading;
    compassRoseAnimation.To = navigationData.heading;
    RotateTransform rotateTransform = new RotateTransform();
    CompassWithNumbersControl.RenderTransform = rotateTransform;
    rotateTransform.BeginAnimation(RotateTransform.AngleProperty, compassRoseAnimation);
}

Я должен выполнять эту анимацию только при правильном срабатывании события, но оно работает ..

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