Я недавно начал использовать элемент управления картами Bing и также столкнулся с той же проблемой.Это не элегантно, но мне удалось обойти его, вручную создав элемент управления Map
, когда мне это нужно.
В моем случае, карта находится в центре моего приложения, поэтому мне нужно загрузить егопочти мгновенноПоскольку я хочу, чтобы само приложение сразу полностью отображалось (чтобы пользователь знал, что происходит), я откладываю создание элемента управления Map
до тех пор, пока содержимое не будет отображено в MainWindow
.Вы можете добиться этого, используя что-то вроде:
XAML
<Grid x:Name="MapPanel">
<!-- Placeholder text while the map is loading -->
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="Loading map..." />
</Grid>
Code-Behind
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
.Вместо этого вы могли бы загрузить элемент управления лениво, поэтому вы по существу уведомляете хост-элемент управления, когда требуется карта, и загружаете его в этот момент, если он еще не загружен.
Надеюсь, это поможет.