我想以编程方式向Canvas添加大量(100K)的Rectangle。不幸的是,如果我通过Add()逐个执行此代码,则代码很慢。由于我确切知道新元素的数量,我正在寻找一种方法来首先初始化一组新实例,然后将这个集合添加到UIElementCollection(Canvas子项)。我正在寻找像AddRange,CopyFrom(数组)等方法。有什么想法吗?
答案 0 :(得分:2)
AddRange
没有UIElementCollection
或类似功能。所以你不能同时添加很多元素。
但正如您对问题的评论所说,如果您要向同一画布添加100k元素,则可能会出错。
你想做什么?
答案 1 :(得分:1)
在阅读完您的问题和评论之后,我建议使用树状结构或哈希表。 Rect1-> Rect11,Rect11,Rect111,Rect1111 ...... Rect2-> ...
显示Rect1,Rect2等,然后查看哪个tile / rect用户单击,并相应地更改视图。请注意,您的Rect11可能是另一个用于进一步缩放的哈希表,依此类推。
这看起来像你在手数矩形之前所知的最佳方法。
要查找单击的图块,您可以使用以下路由:
<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);
}