Как установить свойство без использования анимации (Composition Api)? - PullRequest
0 голосов
/ 30 апреля 2019

Вопрос, как мы можем установить значение для свойства в 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 ]

1 голос
/ 03 мая 2019

Вот пример того, что я сделал на основе ответа @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));
}
1 голос
/ 01 мая 2019

Документ уже сказал, что перевод не нагляден: Эти свойства имеют то же назначение и поведение, что и одноименные свойства в классе Visual композиции (за исключением Translation, который отсутствует в Visual).


Edit:

Прежде всего, спасибо 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);
        }

Кстати, если вы просто фокусируете внимание на анимации элемента пользовательского интерфейса (не визуального), набор инструментов сообщества содержит простую функцию для смещения

...