首页 > 解决方案 > 如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

问题描述

正如我在标题中所写,我使用 Microsoft Xamarin.Forms.Maps 块在我的应用程序中显示地图。首先我从 Xamarin.Forms.GoogleMaps 开始,但是当我看到我无法自定义 InfoWindows(当我触摸一个引脚时)时,我必须返回并开始使用 Xamarin.Forms.Maps。唯一的问题是我必须将“灰色样式”应用于地图或类似的东西。而且我找不到任何链接或指南来做到这一点。似乎 CustomRender 无法修改样式或颜色。

请问,有人可以帮我吗?任何链接、文档或示例?

标签: xamarin.formscustom-rendererxamarin.forms.maps

解决方案


如果您指的是Dark Mode您可以创建自定义渲染器来实现这一点。

iOS

设置OverrideUserInterfaceStyle OnElementChanged .

[assembly: ExportRenderer(typeof(Map), typeof(MyRenderer))]
namespace FormsApp.iOS
{
    class MyRenderer : MapRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<View> e)
        {
            base.OnElementChanged(e);
            if (e.NewElement != null)
            {
                var nativeMap = Control as MKMapView;
                nativeMap.OverrideUserInterfaceStyle = UIUserInterfaceStyle.Dark;
            }
        }
    }
}

安卓

在资源中创建一个暗模式文件并设置mapStyleOnElementChanged .

[assembly: ExportRenderer(typeof(Map), typeof(MyMapRenderer))]
namespace FormsApp.Droid
{
    class MyMapRenderer : MapRenderer
    {
        Context _context;

        public MyMapRenderer(Context context) : base(context)
        {
            _context = context;        
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Map> e)
        {
            base.OnElementChanged(e);

            if(e.NewElement != null)
            {
                NativeMap.SetMapStyle(MapStyleOptions.LoadRawResourceStyle(this.Context, Resource.Raw.map_style_night));
            }
        }
    }
}

参考

https://forums.xamarin.com/discussion/comment/429548/#Comment_429548

如何在 Xamarin.Forms.Maps 中使用暗模式谷歌地图?.


推荐阅读