在UWP/WinUI中从VisualCollection中删除视觉效果的规范方法

在UWP/WinUI中从VisualCollection中删除视觉效果的规范方法,uwp,c++-winrt,winui,Uwp,C++ Winrt,Winui,我正在使用一个,并试图找出如何删除特定索引中的。Microsoft文档列出了一种可能的API,即。现在,我的用例如下(假设可视化集合的大小最初为5): 通过父级的可视化集合,从下到上向子级应用一些修改(更改大小()/偏移()//笔刷())。(假设底部的3个Visuals如示例所示) 从VisualCollection中删除剩余的(未更新的)SpriteVisuals(顶部剩余的2个SpriteVisuals,如示例所示) 通过API将新的SpriteVisuals添加到父ContainerVis

我正在使用一个,并试图找出如何删除特定索引中的。Microsoft文档列出了一种可能的API,即。现在,我的用例如下(假设
可视化集合的大小最初为5):

  • 通过父级的
    可视化集合
    ,从下到上向子级应用一些修改(更改
    大小()
    /
    偏移()/
    /
    笔刷()
    )。(假设底部的3个
    Visual
    s如示例所示)
  • VisualCollection
    中删除剩余的(未更新的)
    SpriteVisual
    s(顶部剩余的2个
    SpriteVisual
    s,如示例所示)
  • 通过API将新的
    SpriteVisual
    s添加到父
    ContainerVisual
  • 该文档提供了
    VisualCollection.First()
    API,以获取对
    VisualCollection
    的访问权限,但没有列出任何关于在迭代过程中修改集合时,
    IIterator
    可能如何操作的指导原则。我假定同一个迭代器失效警告适用于任何规则的C++容器。 那么,我们如何按照上述方式修改
    VisualCollection
    ?我有这个修改的代码(我认为它与
    范式中的不太适合)

    size\u t idx=0;
    for(auto-const&child:primaryVisual.Children()){//primaryVisual是父容器
    if(idx

    现在如何删除剩余的
    primaryVisual.Children().Count()-updateCount
    child
    SpriteVisual
    s?我正在为
    WinRT
    使用
    C++/WinRT
    语言投影。我需要解决方案能够跨UWP和WinUI进行扩展。

    Windows.UI下没有此类api。Composition命名空间可以通过索引直接删除visual。您可以将每个视频录制到列表集合中。更改视觉效果时,您可以迭代parent.Children和List,如果某个项匹配,这表明它没有更改,则可以从parent.Children和List中删除此视觉效果。请注意,在通过InsertAtTop()方法添加visual时,还需要将visual添加到列表中。
    size_t idx = 0;
    for (auto const& child : primaryVisual.Children()) { //primaryVisual is the parent ContainerVisual
        if (idx < updateCount) { //updateCount is the number of Visuals to be updated
            auto& spriteChild{ child.as<uxp_winrt::UI::Composition::SpriteVisual>() };
            spriteChild.Size(uxp_winrt::Numerics::float2{width. height }); //width, height are the new sizes
            spriteChild.Offset(uxp_winrt::Numerics::float3{ left, top, 0 }); //left, top are the new offsets
            idx++;
        }
        else {
            break;
        }
    }