【问题标题】:MapControl using XAML Island in WPF: default map layer is shown over custom tile layerMapControl 在 WPF 中使用 XAML 岛:默认地图图层显示在自定义切片图层上
【发布时间】:2023-03-03 22:53:02
【问题描述】:

我已使用this instructionMapControl 添加到我的WPF 应用程序中。我想为其添加自定义地图图层,因此我使用this instruction 添加了OpenStreetMap 切片图层。我想完全删除默认地图,但它不起作用。

我已经在 UWP 应用中测试了原始的 MapControl,它可以工作。

我在 WPF 中的代码:

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:controls="clr-namespace:Microsoft.Toolkit.Wpf.UI.Controls;assembly=Microsoft.Toolkit.Wpf.UI.Controls"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <controls:MapControl x:Name="mapControl" />
    </Grid>
</Window>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            HttpMapTileDataSource dataSource = new HttpMapTileDataSource("http://c.tile.openstreetmap.org/{zoomlevel}/{x}/{y}.png");

            MapTileSource tileSource = new MapTileSource(dataSource);
            tileSource.Visible = true;
            tileSource.Layer = MapTileLayer.BackgroundReplacement;
            tileSource.IsFadingEnabled = false;
            mapControl.Style = Microsoft.Toolkit.Win32.UI.Controls.Interop.WinRT.MapStyle.None;
            mapControl.TileSources.Add(tileSource);
        }
    }

这是 WPF 应用程序。它在顶部显示OpenStreetMap 图层和默认的Bing 地图图层:

这是 UWP 应用,仅完美显示 OpenStreetMap

有没有办法在 WPF 中修复它?

更新

我发现这条线没有正确应用并导致错误:

mapControl.Style = Microsoft.Toolkit.Win32.UI.Controls.Interop.WinRT.MapStyle.None;

【问题讨论】:

  • 您考虑过使用open-source alternative吗?
  • @Clemens 是的。我用过。但我有一些性能限制,Xaml.MapControl 的使用率比 UWP MapControl 更高。 (高达 20%)

标签: wpf xaml xaml-islands


【解决方案1】:

我终于找到了解决方案。将这些行添加到初始化代码中:

Windows.UI.Xaml.Controls.Maps.MapControl originalMapControl =
    mapControl.GetUwpInternalObject() as Windows.UI.Xaml.Controls.Maps.MapControl;

if (originalMapControl != null)
{
    originalMapControl.Style = MapStyle.None;
}

它修复了缺陷。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多