是否可以向UIElementCollection添加范围?

时间:2015-10-02 21:12:01

标签: c# wpf

我想以编程方式向Canvas添加大量(100K)的Rectangle。不幸的是,如果我通过Add()逐个执行此代码,则代码很慢。由于我确切知道新元素的数量,我正在寻找一种方法来首先初始化一组新实例,然后将这个集合添加到UIElementCollection(Canvas子项)。我正在寻找像AddRange,CopyFrom(数组)等方法。有什么想法吗?

2 个答案:

答案 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);
        }