【问题标题】:Bind class property to UWP Composition API expression将类属性绑定到 UWP 组合 API 表达式
【发布时间】:2019-11-01 09:11:16
【问题描述】:

我正在尝试使用新的 Composition API 不断地为 UWP 中的 UserControl 设置动画。我考虑过使用表达式函数并将Vector3 TargetPosition 类属性绑定到表达式。 但是当我尝试 targetPosition 没有得到更新时,只有当我使用 _propSet.InsertVector3("targetPos", TargetPosition); 手动重置表达式内的值时@

以下代码展示了我的方法:

public Vector3 TargetPosition;

[...]

_propSet = _rootVisual.Compositor.CreatePropertySet();
_propSet.InsertVector3("targetPos", TargetPosition);

var posAnim = ExpressionFunctions.Lerp(_rootVisual.GetReference().Offset,
            _propSet.GetReference().GetVector3Property("targetPos"),
            0.05f);

_rootVisual.StartAnimation("Offset", posAnim);

是否可以将类属性绑定到 UWP 组合 API 表达式动画?当使用其他视觉偏移作为目标位置时,该值会自动更新,而无需手动设置。

【问题讨论】:

    标签: c# xaml uwp composition


    【解决方案1】:

    是否可以将类属性绑定到 UWP 组合 API 表达式动画?

    在UWP中,绑定的目标是DependencyProperty,这里是document

    这意味着您不能以Binding 方式设置合成动画。

    更新

    如果你想通过修改变量来自动化一些事情(比如运行动画),你可以对你的变量做一些调整。

    private Vector3 _targetPosition;
    public Vector3 TargetPosition
    {
        get => _targetPosition;
        set
        {
            _targetPosition = value;
            DoSomething(value);
        }
    }
    

    这样每次修改TargetPosition时都会调用DoSomething方法。

    最好的问候。

    【讨论】:

    • 我没有完全理解,那么当我将变量实现为 DependencyProperty 时它是否有效?
    • 对不起,我没有解释清楚。我的意思是,被绑定的目标(不是数据变量)需要具有依赖属性的实现。比如Button.Content就是要绑定的目标。 Button中有一个ContentProperty作为依赖属性,所以可以绑定。但是没有组合动画的依赖属性实现,所以这就是你不能使用绑定的原因。
    • 啊,好吧,但实际上我想要相反。我不想绑定合成动画本身,我想在合成动画中使用一个变量,当我在代码中的某处更改变量时,我想自动更新它,所以动画正在改变。例如,我有一个基于变量设置视觉偏移的动画。我想改变代码中的变量,然后视觉偏移也应该改变。它在我使用视觉属性作为变量时有效,但在使用类变量时无效。
    猜你喜欢
    • 2016-02-22
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多