#c# #xamarin #xamarin.forms #uwp #custom-renderer
#c# #xamarin #xamarin.forms #uwp #пользовательский рендерер
Вопрос:
Я работаю над проектом «CoManga», и я хотел добавить в него рекламу. Внедрение рекламы на UWP казалось простым, как на Android и iOS. Однако сейчас я застрял.
В любом случае, я последовал этому руководству Джеймса Монтеманьо и добавил все. Я даже вижу тестовую рекламу, и это здорово. Однако, когда я пытаюсь отойти от этой страницы (когда я нажимаю «Кнопку НАЗАД») и перейти на предыдущую страницу, я получаю сообщение об ошибке.
Это ошибка :
Setting up AdControlView in UWP throws System.InvalidOperationException: 'Cannot assign a native control without an Element; Renderer unbound and/or disposed. Please consult Xamarin.Forms renderers for reference implementation of OnElementChanged.'.
Он выдается в строке с номером 50, где я установил SetNativeControl(adView);
. Я прокомментировал это прямо сейчас, но как только я отменяю комментарий, я вижу эту ошибку.
Может ли кто-нибудь помочь мне с этим.
Комментарии:
1. Работает ли следующий ответ?
2. Извините, я не смог установить этот. Поэтому не удалось проверить. Попытаюсь проверить это сегодня вечером и пометю как решаемую, если это сработает.
Ответ №1:
Настройка AdControlView в UWP приводит к сбоям в системе.Исключение InvalidOperationException: ‘Невозможно назначить собственный элемент управления без элемента; Средство визуализации не привязано и / или удалено. Пожалуйста, обратитесь к Xamarin.Средства визуализации форм для эталонной реализации OnElementChanged.
Причина в том, что элемент xamarin был выпущен, но SetNativeControl
вызван снова, из-за чего собственный элемент управления не может найти соответствующий элемент xamarin при возврате страницы. Таким образом, вы могли бы установить флаг ( isRegist
) для записи зарегистрированного объявления.
public class AdViewRenderer : ViewRenderer<AdControlView, AdControl>
{
string bannerId = "test";
AdControl adView;
string applicationID = "3f83fe91-d6be-434d-a0ae-7351c5a997f1";
bool isRegist = false;
protected override void OnElementChanged(ElementChangedEventArgs<AdControlView> e)
{
base.OnElementChanged(e);
if (Control == null amp;amp; isRegist != true)
{
CreateNativeAdControl();
SetNativeControl(adView);
isRegist = true;
}
}
private void CreateNativeAdControl()
{
if (adView != null)
return;
var width = 300;
var height = 50;
if (AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Desktop")
{
width = 728;
height = 90;
}
// Setup your BannerView, review AdSizeCons class for more Ad sizes.
adView = new AdControl
{
ApplicationId = applicationID,
AdUnitId = bannerId,
HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center,
VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Bottom,
Height = height,
Width = width
};
}
}
Комментарии:
1. Я все еще получаю ошибку после возврата со страницы, на которой отображается реклама. Если я проверю
isRegist != true
, я не получу никакого объявления на предыдущей странице. Если я удаляю его, я получаю ту же ошибку. На первой странице я получаю ad только при запуске приложения. после этого при переходе со следующей страницы я либо получаю эту ошибку, либо не получаю никакого объявления.