如何创建快速轻量级的UIElement

时间:2014-04-29 12:39:30

标签: c# wpf google-maps user-controls uielement

我正在创建一个标记路径,以便在我的C#/ XAML(WPF)应用程序中的GMapControl上显示。控件需要我创建一个UIElement作为标记叠加在地图上。我为此创建了一个非常简单的UserControl,如下所示:

<UserControl x:Class="Project.Resources.Circle"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Ellipse Width="5" Height="5" Stroke="Red" Fill="Red" />
    </Grid>
</UserControl>

但是,当我构建该行时,创建多达400个此控件实例的任何内容时,我的应用程序会冻结。由于我似乎只能在UI线程上创建UserControl(而不是在Thread或BackgroundWorker中),我该怎么做才能加速创建新的Circle实例?

是否存在比UserControl更多的轻量级 UIElement?对此有任何指导意见。

1 个答案:

答案 0 :(得分:1)

您可以像这样创建一个最小的派生UIElement:

public class Circle : UIElement
{
    protected override void OnRender(DrawingContext drawingContext)
    {
        const double radius = 2.5;
        drawingContext.DrawEllipse(Brushes.Red, null, new Point(), radius, radius);
    }
}