0

我正在使用 aVisualCollection并试图弄清楚如何Visual在特定索引处删除 s 。Microsoft 文档列出了一种可能的 API,即VisualCollection.Remove(). 现在我的用例如下(假设VisualCollection最初的大小是 5):

  1. 通过 parent的从下到上的方向对子 s应用一些修改(更改Size()/ Offset()// Brush()) 。(根据示例,假设 3 个底部s)SpriteVisualContainerVisualVisualCollectionVisual
  2. SpriteVisual从(根据示例在顶部VisualCollection的剩余 2秒)中删除剩余的(未更新)SpriteVisual
  3. 通过APISpriteVisual向父级添加新的 s。ContainerVisualInsertAtTop()

该文档提供了VisualCollection.First()API 来获取IIteratorVisualCollection但它没有列出任何指导方针,说明IIterator在迭代集合时修改集合时的行为方式。我假设与任何常规 C++ 容器相同的迭代器失效警告适用。

那么,我们如何VisualCollection以上述方式进行修改呢?for...in我有这个修改代码(这与我认为的范式不太吻合)

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;
    }
}

现在如何删除剩余的primaryVisual.Children().Count() - updateCountchild SpriteVisual?我正在将C++/WinRT语言投影用于WinRT. 我需要该解决方案可在 UWP 和 WinUI 之间进行扩展。

4

0 回答 0