是否可以添加一个范围到UIElementCollection
本文关键字:一个 范围 UIElementCollection 添加 是否 | 更新日期: 2023-09-27 18:15:40
我想添加一个巨大的(100K)矩形到画布,编程。不幸的是,如果我通过Add()一个接一个地执行此操作,我的代码很慢。因为我确切地知道新元素的数量,所以我正在寻找一种方法来首先初始化一组新实例,然后将这组实例添加到UIElementCollection (Canvas子)中。我正在寻找一个方法,如AddRange, CopyFrom(数组)等。任何想法?
不存在AddRange
或UIElementCollection
的类似功能。因此,您不能同时添加多个元素。
但是正如对你的问题的评论所说,如果你在同一画布上添加10万个元素,你可能会做错一些事情。
你想干什么?
在阅读了您的问题和评论后,我建议使用树状结构或哈希表。Rect1-> Rect11, Rect11, Rect111, Rect1111…Rect2 ->…
您显示Rect1, Rect2等,然后查看哪个tile/rect用户单击,并相应地更改视图。注意,Rect11可以是另一个散列表,用于进一步缩放等等。
这看起来是最好的方法,因为你知道之前的矩形数。
为了找到被点击的贴图,你可以像下面这样使用Routing:
<Canvas Rectangle.MouseDown="Rectangle_MouseDown">
<Rectangle x:Name="rect1" Fill="#FFF4F4F5" Height="32" Canvas.Left="20" Stroke="Black" Canvas.Top="32" Width="37"/>
<Rectangle x:Name="rect2" Fill="#FFF4F4F5" Height="24" Canvas.Left="121" Stroke="Black" Canvas.Top="32" Width="50"/>
<Rectangle Fill="#FFF4F4F5" Height="8" Canvas.Left="48" Stroke="Black" Canvas.Top="99" Width="9"/>
<Rectangle x:Name="rect3" Fill="#FFF4F4F5" Height="41" Canvas.Left="121" Stroke="Black" Canvas.Top="99" Width="73"/>
</Canvas>
///
private void Rectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
Rectangle rect = (Rectangle)e.Source;
System.Diagnostics.Debug.WriteLine(rect.Name);
}