2014-04-29 80 views
1

我正在創建一個標記路徑,以在我的C#/ XAML(WPF)應用程序中的GMapControl上顯示。該控件要求我創建一個UIElement作爲標記疊加在地圖上。我已經創造了這個目的,一個非常簡單的用戶控件,如下所示:如何創建一個快速輕量級的UIElement

<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實例?

是否有更多的輕量級 UIElement比UserControl?對此的任何指導表示讚賞。

+0

如何自UIElement直接派生並重寫了'OnR​​ender'方法?在那裏你可以將你的圓圈繪製到傳遞的DrawingContext實例中。 – Clemens

+0

或者你直接使用'Ellipse'而不是將它們包裝在UserControls中。 – Clemens

+0

由於Ellipse是一個密封類,我無法使用你的第二個建議。幸運的是,我只在XAML中使用了UIElement,並使用帶有drawingContext.DrawEllipse()的OnRender嘗試了第一次,並且性能突飛猛進,超越了UserControl!你想把這個作爲答案嗎?或者我會嗎? – agc93

回答

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