UWP MapControl Не удается добавить MapIcon при создании пакета приложения, предназначенного для более старой ОС

Я пытаюсь добавить MapIcon в свой элемент управления картами Bing. Когда я запускаю приложение в своей среде отладки в Visual Studio, у меня нет никаких проблем. Однако, как только я соберу свой пакет приложения и запущу его, добавление значка карты приведет к сбою приложения и выдаст исключение, которое гласит:

«Невозможно привести объект типа Windows.UI.Xaml.Controls.Maps.MapIcon к типу Windows.UI.Xaml.Controls.Maps.IMapElement4»

Вот простой код, который создает экземпляр MapIcon. Важно знать, что у меня нет проблем с добавлением этих значков карты в режиме отладки. Проблема существует только после сборки и запуска пакета приложения. Я смог точно определить исключение, используя try/catch, чтобы отобразить исключение во время работы выпущенного приложения. Если кто-нибудь может помочь мне избавиться от этого исключения или дать какие-либо советы по обходному пути, я был бы очень признателен.

 MapIcon messageicon2_2 = new MapIcon
                    {
                        Location = message_position,
                        NormalizedAnchorPoint = new Point(0.5, 1.0),
                        ZIndex = 0,
                        Title = "msg " + count + "(2.2)",
                        IsEnabled = true,                            
                        CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible
                    };

                    MyWaypoints.Add(messageicon2_2);
                    messageLayer.MapElements = MyWaypoints;

[РЕДАКТИРОВАТЬ для уточнения]: я знаю, что эта ошибка связана именно с созданием экземпляра Mapicon. Этот код отлично работает, когда он выпущен и запущен на компьютере с Windows 10 17134.... Машина, на которой мне нужно, чтобы он работал, - это Windows 10 16299. Этот компьютер не может быть обновлен до более новой версии Windows. Мне нужен способ отображения этих значков карты в этой старой версии Windows.


person kdun0508    schedule 14.08.2018    source источник
comment
Какая строка кода вызывает исключение?   -  person mjwills    schedule 14.08.2018
comment
Иконка карты: MapIcon messageicon2_2 = new MapIcon   -  person kdun0508    schedule 14.08.2018
comment
это может показаться глупым, но попробуйте var messageicon2_2 = new MapIcon   -  person Muhammad Touseef    schedule 14.08.2018
comment
это не сработало   -  person kdun0508    schedule 14.08.2018
comment
Пробовали ли вы добавить MapIcon с пользовательским изображением, проверьте это в Windows 10 16299 и сообщите результат.   -  person Nico Zhu - MSFT    schedule 15.08.2018


Ответы (1)


Исключение указывает на свойство IsEnabled, которое было добавлено к MapElement для ОС Windows версии 1803 (17134). См. свойство MapElement.IsEnabled< /а>.

Я знаю, что исключение не самое полезное, но, может быть, было какое-то другое предупреждение об этом, которое было пропущено?

Для подобных ошибок вы можете удалить все варианты использования отсутствующего API и/или обязательно написать код с адаптацией к версии, который может работать в самой ранней версии ОС, а также использует преимущества выбранных функций, доступных только в определенных версиях ОС.

В частности, вы можете сделать что-то вроде:

        var messageicon2_2= new MapIcon
        {
            Location = message_position,
            NormalizedAnchorPoint = new Point(0.5, 1.0),
            ZIndex = 0,
            Title = "msg " + count + "(2.2)",
            CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible
        };

        if (ApiInformation.IsPropertyPresent("Windows.UI.Xaml.Controls.Maps.MapElement", "IsEnabled"))
        {
            messageicon2_2.IsEnabled = true;
        }

        MyWaypoints.Add(messageicon2_2);
        messageLayer.MapElements = MyWaypoints;
person J. Pablo Candelas    schedule 06.09.2019