Как установить свойство без использования анимации (Composition Api)?
Вопрос, как мы можем установить значение для свойства в Visual без использования анимации? Например, это работает для меня (для перевода), но я чувствую, что должен быть лучший способ. Я использую анимацию в 1 миллисекунду, чтобы сразу установить значение:
ElementCompositionPreview.SetIsTranslationEnabled(MyRectangle, true);
var visual = ElementCompositionPreview.GetElementVisual(MyRectangle);
var anim = compositor.CreateScalarKeyFrameAnimation();
anim.InsertKeyFrame(1.0f, 100f);
anim.Duration = TimeSpan.FromMilliseconds(1);
visual.StartAnimation("Translation.Y", anim);
2 ответа
В документе уже сказано, что перевод не на визуальном уровне: эти свойства имеют то же назначение и поведение, что и свойства с аналогичными именами в классе Visual композиции (за исключением перевода, который отсутствует в Visual).
Редактировать:
Прежде всего, спасибо Maximus за то, что поделились:
ElementCompositionPreview.SetIsTranslationEnabled(MyRectangle, true);
Я до сих пор не совсем уверен в вашей конкретной проблеме. Но для вопроса заголовка: "Как установить свойство без использования анимации", вы имеете в виду что-то вроде этого:
ElementCompositionPreview.SetIsTranslationEnabled(MyRectangle, true);
var myInteropVisualPropertySet = ElementCompositionPreview.GetElementVisual(MyRectangle).Properties;
myInteropVisualPropertySet.InsertVector3("Translation", new Vector3(0f,100f,0f));
Кроме того, у меня есть следующий пример кода для вопроса "Предположим, что смещение должно быть, как вы заявили, и установите его непосредственно с анимацией":
private void MyRectangle_Tapped(object sender, TappedRoutedEventArgs e)
{
var compositor = Window.Current.Compositor;
Visual visual = ElementCompositionPreview.GetElementVisual(MyRectangle);
var vertical = compositor.CreateVector3KeyFrameAnimation();
vertical.InsertKeyFrame(1.0f, new Vector3(0f, 100f, 0f));
vertical.Duration = TimeSpan.FromMilliseconds(1);
visual.StartAnimation("Offset", vertical);
}
Кстати, если вы просто сосредоточены на анимации элемента пользовательского интерфейса (не визуального), набор инструментов сообщества содержит простую функцию для смещения
Вот пример того, что я сделал, основываясь на ответе @Barry Wang:
var props = ElementCompositionPreview.GetElementVisual(MyRectangle).Properties;
if (props.TryGetVector3("Translation", out var vect) == CompositionGetValueStatus.Succeeded)
{
props.InsertVector3("Translation", new Vector3(vect.X, 150f, vect.Z));
}