Как анимировать Visual.TransformMatrix? - PullRequest
0 голосов
/ 13 ноября 2018

В документации TransformMatrix написано "Это свойство может быть анимировано. Вызовите CompositionObject.StartAnimation, чтобы связать его с CompositionAnimation."

Но я не могу создать CompositionAnimation, которая может нацеливаться на него.Я пробовал CreateQuaternionKeyframeAnimation и пробовал CreateVector4KeyframeAnimation:

Visual visual = ElementCompositionPreview.GetElementVisual(myUIElement);
var animation = visual.Compositor.CreateVector4KeyFrameAnimation();
Vector4 v4 = Vector4.Transform(new Vector4(), myMatrix4x4);
animation.InsertKeyFrame(1f, v4);
animation.Duration = TimeSpan.FromMilliseconds(3000);
visual.StartAnimation(nameof(visual.TransformMatrix), animation);

, который выдает «Вывод выражения не соответствует типу свойства анимации», как и следовало ожидать.Я не знаю, что еще попробовать.Нужно ли создавать 16 отдельных скалярных анимаций, по одной для каждого значения матрицы?Это кажется немного сумасшедшим.

РЕДАКТИРОВАТЬ: Поэтому я попытался просто развернуть свою собственную и использовать 16 скалярных анимаций, например, так:

for (int i = 5; i <= 20; i++)
{
    int row = (i / 4);
    int column = (i % 4);
    if (column == 0) { column = 4; }
    var matrixAnimation = visual.Compositor.CreateScalarKeyFrameAnimation();
    var matrixEasing = visual.Compositor.CreateLinearEasingFunction();
    matrixAnimation.InsertExpressionKeyFrame(1f, "this.FinalValue", matrixEasing);
    matrixAnimation.Target = nameof(visual.TransformMatrix) + ".M" + row + column;
    matrixAnimation.Duration = TimeSpan.FromMilliseconds(durationMilliseconds);
    visual.ImplicitAnimations[nameof(visual.TransformMatrix) + ".M" + row + column] = matrixAnimation;
}

Так что неявные анимации созданы, и все кажется великолепным.Затем, к моему ужасу, я пишу код для изменения свойств чтения / записи M11-M44, которые должны вызвать неявную анимацию, и получаю ошибку компилятора:

"Невозможно изменить возвращаемое значение Visual.TransformMatrix ', поскольку он не является переменной ".

И присвоение ему нового Matrix4x4 не вызывает неявную анимацию.

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