是否可以添加一个范围到UIElementCollection

本文关键字:一个 范围 UIElementCollection 添加 是否 | 更新日期: 2023-09-27 18:15:40

我想添加一个巨大的(100K)矩形到画布,编程。不幸的是,如果我通过Add()一个接一个地执行此操作,我的代码很慢。因为我确切地知道新元素的数量,所以我正在寻找一种方法来首先初始化一组新实例,然后将这组实例添加到UIElementCollection (Canvas子)中。我正在寻找一个方法,如AddRange, CopyFrom(数组)等。任何想法?

是否可以添加一个范围到UIElementCollection

不存在AddRangeUIElementCollection的类似功能。因此,您不能同时添加多个元素。

但是正如对你的问题的评论所说,如果你在同一画布上添加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);
        }