我正在使用 aVisualCollection并试图弄清楚如何Visual在特定索引处删除 s 。Microsoft 文档列出了一种可能的 API,即VisualCollection.Remove(). 现在我的用例如下(假设VisualCollection最初的大小是 5):
- 通过 parent的从下到上的方向对子 s应用一些修改(更改
Size()/Offset()//Brush()) 。(根据示例,假设 3 个底部s)SpriteVisualContainerVisualVisualCollectionVisual SpriteVisual从(根据示例在顶部VisualCollection的剩余 2秒)中删除剩余的(未更新)SpriteVisual- 通过API
SpriteVisual向父级添加新的 s。ContainerVisualInsertAtTop()
该文档提供了VisualCollection.First()API 来获取IIterator,VisualCollection但它没有列出任何指导方针,说明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 之间进行扩展。