0

问题,我们如何在不使用动画的情况下为 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);
4

2 回答 2

1

文档已经说过翻译不在视觉上:这些属性与组合视觉类上的同名属性具有相同的目的和行为(除了翻译,它不在视觉上)。


编辑:

首先感谢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);
        }

顺便说一句,如果您只专注于动画 UI 元素(不是视觉元素),社区工具包包含一个简单的偏移功能

于 2019-05-01T07:20:05.910 回答
1

这是我根据@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));
}
于 2019-05-03T17:32:13.643 回答