2011-12-10 6 views
2

私は現在、マッピングがサポートされているWPFアプリケーションで作業しています。Bing Mapsを使用したWPFアプリケーション起動時に痛いほど遅いコントロール

Bing Maps Controlはすべての初期データを取得するので、アプリケーションの起動にかなりの時間がかかります(この場合はhttp://www.microsoft.com/download/en/details.aspx?id=27165)。地図を表示する。

私のアプリケーションのマッピング部分はめったに必要ではないので、毎回使用されていない機能のためのスロースタートが非常に悪いので、最初にコントロールの可視性を希望で「折りたたみ」に設定しますそれは要求されませんが、それは助けになりません。

Bing Mapsコントロールをアプリケーション起動時に明示的に初期化する方法はありますか?

答えて

0

最近私はBingマップコントロールの使用を開始しましたが、同じ問題を抱えています。エレガントではありませんが、必要なときに手動でMapコントロールを作成することで回避できました。

私の場合、地図は私のアプリケーションの主な焦点ですので、ほとんど即座にロードする必要があります。アプリケーション自体が完全にレンダリングされるように(ユーザーが何が起こっているかを知るため)、コンテンツがMainWindowにレンダリングされるまで、Mapコントロールの作成を延期します。あなたが好きなもの使ってこれを実現することができます

あなたのシナリオでは

XAML

<Grid x:Name="MapPanel"> 

    <!-- Placeholder text while the map is loading --> 
    <TextBlock HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Text="Loading map..." /> 
</Grid> 

コードビハインド

protected override void OnContentRendered(EventArgs e) 
{ 
    base.OnContentRendered(e); 

    // Change the cursor to a waiting cursor so the user knows we are loading something 
    var previousCursor = Cursor; 
    Cursor = Cursors.Wait; 

    // Load the application Id credentials required for the Bing map 
    var provider = new ApplicationIdCredentialsProvider(Properties.Resources.BingMapsAPIKey); 

    // Set up the Bing map control 
    var map = new Map(); 
    map.Mode = new AerialMode(labels: true); 
    map.CredentialsProvider = provider; 
    map.HorizontalAlignment = HorizontalAlignment.Stretch; 
    map.VerticalAlignment = VerticalAlignment.Stretch; 

    // Render the map control over the top of the loading text in the map panel 
    MapPanel.Children.Add(map); 

    // Reset the application cursor 
    Cursor = previousCursor; 
} 

を、あなたは必ずしもロードする必要はありませんこの時点でMapコントロール代わりに、コントロールが遅延ロードされ、マップが必要なときにホストコントロールに本質的に通知し、まだロードされていなければそのポイントでロードすることができます。

希望に役立ちます。

関連する問題