C# 超宽带偏移视差

C# 超宽带偏移视差,c#,animation,uwp,parallax,windows-community-toolkit,C#,Animation,Uwp,Parallax,Windows Community Toolkit,我开发了一个UWP应用程序,该应用程序可以查看带有半透明项目背景的图像,如Windows Phone开始屏幕上的图像(例如)。 我决定把我的解决方案建立在这个基础上。 首先,我取了物品的左上角: var p = parallaxElement.TransformToVisual(scroller).TransformPoint(new Point(0, 0)); 我应该在动画表达式中的何处添加此偏移?我也没有找到这方面的完整文档 ExpressionAnimation expression

我开发了一个UWP应用程序,该应用程序可以查看带有半透明项目背景的图像,如Windows Phone开始屏幕上的图像(例如)。 我决定把我的解决方案建立在这个基础上。 首先,我取了物品的左上角:

var p = parallaxElement.TransformToVisual(scroller).TransformPoint(new Point(0, 0));
我应该在动画表达式中的何处添加此偏移?我也没有找到这方面的完整文档

 ExpressionAnimation expression = compositor.CreateExpressionAnimation(
        "Matrix4x4.CreateFromTranslation(Vector3(HorizontalMultiplier * scroller.Translation.X, VerticalMultiplier * scroller.Translation.Y, 0.0f))");
    expression.SetReferenceParameter("scroller", scrollerViewerManipulation);
    expression.SetScalarParameter("offsetX", (float)p.X);
    expression.SetScalarParameter("offsetY", (float)p.Y);

换句话说,我想实现“查看共享大图像上的项目”的效果;项目在画布中是完整的。

要设置列表中所有图像的动画,可以按照

以下是tl/dr版本:

创建动画。加载页面时执行以下操作:

private void SetupAnimation()
{
    // available with SDK version 15063
    Compositor compositor = Window.Current.Compositor;
    // available with previous SDK version
    //Compositor compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;

    // Get scrollviewer using UWP Community Toolkit extension method
    ScrollViewer myScrollViewer = ImageList.FindDescendant<ScrollViewer>();
    _scrollProperties = ElementCompositionPreview.GetScrollViewerManipulationPropertySet(myScrollViewer);

    // Setup the expression
    var scrollPropSet = _scrollProperties.GetSpecializedReference<ManipulationPropertySetReferenceNode>();
    var startOffset = ExpressionValues.Constant.CreateConstantScalar("startOffset", 0.0f);
    var parallaxValue = 0.5f;
    var parallax = (scrollPropSet.Translation.Y + startOffset);
    _parallaxExpression = parallax * parallaxValue - parallax;
}
private void SetupAnimation()
{
//SDK版本15063提供
合成器合成器=Window.Current.Compositor;
//可与以前的SDK版本一起使用
//Compositor Compositor=ElementCompositionPreview.GetElementVisual(this.Compositor);
//使用UWP社区工具包扩展方法获取scrollviewer
ScrollViewer myScrollViewer=ImageList.FindDescentant();
_scrollProperties=ElementCompositionPreview.GetScrollViewerManipulationPropertySet(myScrollViewer);
//设置表达式
var scrollPropSet=_scrollProperties.GetSpecializedReference();
var startOffset=ExpressionValues.Constant.CreateConstantScalar(“startOffset”,0.0f);
var视差值=0.5f;
var视差=(scrollPropSet.Translation.Y+startOffset);
_视差表达式=视差*视差值-视差;
}
当容器更改时,为列表中的每个图像设置动画(注意:订阅ListView的ContainerContentChangeing事件)

private void ImageList\u ContainerContentChanging(ListViewBase发送方、ContainerContentChangingEventArgs args)
{
//查找要设置动画的图像元素
Image=args.ItemContainer.ContentTemplateRoot.GetFirstDegenantofType();
Visual Visual=ElementCompositionPreview.GetElementVisual(图像);
//您需要为图像使用正确的大小
visual.Size=新矢量2(960f,960f);
if(_parallaxExpression!=null)
{
_视差表达式.setCalarParameter(“StartOffset”,(float)args.ItemIndex*visual.Size.Y/4.0f);
视觉。起始图像(“偏移量。Y”,视差显示);
}
}

此示例适用于ListView或GridView

要设置列表中所有图像的动画,可以按照

以下是tl/dr版本:

创建动画。加载页面时执行以下操作:

private void SetupAnimation()
{
    // available with SDK version 15063
    Compositor compositor = Window.Current.Compositor;
    // available with previous SDK version
    //Compositor compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;

    // Get scrollviewer using UWP Community Toolkit extension method
    ScrollViewer myScrollViewer = ImageList.FindDescendant<ScrollViewer>();
    _scrollProperties = ElementCompositionPreview.GetScrollViewerManipulationPropertySet(myScrollViewer);

    // Setup the expression
    var scrollPropSet = _scrollProperties.GetSpecializedReference<ManipulationPropertySetReferenceNode>();
    var startOffset = ExpressionValues.Constant.CreateConstantScalar("startOffset", 0.0f);
    var parallaxValue = 0.5f;
    var parallax = (scrollPropSet.Translation.Y + startOffset);
    _parallaxExpression = parallax * parallaxValue - parallax;
}
private void SetupAnimation()
{
//SDK版本15063提供
合成器合成器=Window.Current.Compositor;
//可与以前的SDK版本一起使用
//Compositor Compositor=ElementCompositionPreview.GetElementVisual(this.Compositor);
//使用UWP社区工具包扩展方法获取scrollviewer
ScrollViewer myScrollViewer=ImageList.FindDescentant();
_scrollProperties=ElementCompositionPreview.GetScrollViewerManipulationPropertySet(myScrollViewer);
//设置表达式
var scrollPropSet=_scrollProperties.GetSpecializedReference();
var startOffset=ExpressionValues.Constant.CreateConstantScalar(“startOffset”,0.0f);
var视差值=0.5f;
var视差=(scrollPropSet.Translation.Y+startOffset);
_视差表达式=视差*视差值-视差;
}
当容器更改时,为列表中的每个图像设置动画(注意:订阅ListView的ContainerContentChangeing事件)

private void ImageList\u ContainerContentChanging(ListViewBase发送方、ContainerContentChangingEventArgs args)
{
//查找要设置动画的图像元素
Image=args.ItemContainer.ContentTemplateRoot.GetFirstDegenantofType();
Visual Visual=ElementCompositionPreview.GetElementVisual(图像);
//您需要为图像使用正确的大小
visual.Size=新矢量2(960f,960f);
if(_parallaxExpression!=null)
{
_视差表达式.setCalarParameter(“StartOffset”,(float)args.ItemIndex*visual.Size.Y/4.0f);
视觉。起始图像(“偏移量。Y”,视差显示);
}
}

此示例适用于ListView或GridView

您是否尝试在项目的网格视图(如WP主屏幕)下设置一个图像的动画?或者您正在尝试在“图像的列表视图”中设置所有图像的动画?我想设置列表视图的部分/所有图像的动画您是否正在尝试在项目的网格视图(如WP主屏幕)下设置一个图像的动画?或者您正在尝试在“图像列表视图”中为您的所有图像设置动画?我想为列表视图的部分/所有图像设置动画谢谢,这正是我想要的。你能建议如何将startOffsetX添加到此解决方案中并制作动画Offset.XY吗?你可以添加另一个动画“Offset.X”,就像Offset.Y一样。谢谢,这就是我要找的。您可以建议如何将startOffsetX添加到此解决方案并制作动画Offset.XY吗?您可以添加另一个动画“Offset.X”,就像Offset.Y一样