Я сделал анимацию, чтобы повернуть мой элемент управления, но когда он срабатывает, он просто переходит в конечную позицию, а затем сразу возвращается в исходную позицию.
Элементы управления сделаны из кода и представляют собой текстовые поля со следующими свойствами:
FontSize = 45;
TextAlignment = TextAlignment.Center;
Widh = 40;
Heigh = 45;
Я храню текстовые поля в массиве, поэтому я запускаю анимацию с помощью следующего кода:
foreach (TextBlock b in arrayOfTextBoxes)
{
Rotate(b);
}
Анимация:
public static void Rotate(UIElement target)
{
var projection = new PlaneProjection();
target.Projection = projection;
DoubleAnimation da = new DoubleAnimation();
da.From = 0;
da.To = 90;
da.Duration = TimeSpan.FromSeconds(0.25);
da.AutoReverse = false;
Storyboard.SetTargetProperty(da, new PropertyPath(PlaneProjection.RotationZProperty));
Storyboard.SetTarget(da, projection);
Storyboard sb = new Storyboard();
sb.Children.Add(da);
EventHandler eh = null;
eh = (s, args) =>
{
projection.RotationZ = 90;
sb.Stop();
sb.Completed -= eh;
};
sb.Completed += eh;
sb.Begin();
}
РЕДАКТИРОВАТЬ : Теперь я наверняка знаю, в чем проблема.У меня один (иногда два) Диспетчер Таймс тикает в фоновом режиме каждую секунду.Когда я отключаю их, проблема исчезла.Но я не могу этого сделать, потому что мне нужно, чтобы они измерили время.Остановка их перед тем, как я запускаю анимацию, и их повторный запуск не помогают.// DispetcherTimers делают это:
void tikac_Tick(object sender, EventArgs e)
{
herniCas += new TimeSpan(0, 0, 1);
}