我正在使用 aVisualCollection
并试图弄清楚如何Visual
在特定索引处删除 s 。Microsoft 文档列出了一种可能的 API,即VisualCollection.Remove()
. 现在我的用例如下(假设VisualCollection
最初的大小是 5):
- 通过 parent的从下到上的方向对子 s应用一些修改(更改
Size()
/Offset()/
/Brush()
) 。(根据示例,假设 3 个底部s)SpriteVisual
ContainerVisual
VisualCollection
Visual
SpriteVisual
从(根据示例在顶部VisualCollection
的剩余 2秒)中删除剩余的(未更新)SpriteVisual
- 通过API
SpriteVisual
向父级添加新的 s。ContainerVisual
InsertAtTop()
该文档提供了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() - updateCount
child SpriteVisual
?我正在将C++/WinRT
语言投影用于WinRT
. 我需要该解决方案可在 UWP 和 WinUI 之间进行扩展。