使用Microsoft Advertising AdControl的Xamarin Forms项目。打开页面时控件正常工作,但是当页面的PopAsync在页面上方再次显示时,AdControl为空白,之后保持空白。
我发现了一个似乎在同一主题here上的旧问题,但我无法使用这些答案和评论。
当带有AdControl的页面在页面的PopAsync之后重新出现时,e.NewElement为null,e.OldElement具有AdControlView(我在PCL中的自定义视图)。
UWP渲染器:
public class AdViewRenderer : ViewRenderer<AdControlView, UWPAdView>
{
protected override void OnElementChanged(ElementChangedEventArgs<AdControlView> e)
{
base.OnElementChanged(e);
if (null == Control && e.NewElement != null)
{
UWPAdView ad = new UWPAdView();
SetNativeControl(ad);
}
}
}
UWP项目中的AdControl用户控件:
<UserControl
x:Class="Sample.UWP.Helpers.UWPAdView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:aduwp="using:Microsoft.Advertising.WinRT.UI"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="300"
d:DesignWidth="400"
mc:Ignorable="d">
<Grid>
<aduwp:AdControl
Width="640"
Height="100"
HorizontalAlignment="Stretch"
AdUnitId="myadunitid"
ApplicationId="myappid"
AutoRefreshIntervalInSeconds="30"
ErrorOccurred="AdControl_ErrorOccurred"
IsAutoRefreshEnabled="True" />
</Grid>
</UserControl>
是否有人在Xamarin Forms UWP制作应用中使用AdControl?
答案 0 :(得分:0)
通过测试,当第二页调用PopAsync()
时,第二页面实例将从导航堆栈中删除,新的最顶层页面将成为活动页面,但它似乎是当前最顶层的页面不会创建新实例,而是缓存旧实例。这应该符合预期,但您的AdControl
也不会刷新,并且AdControl
AdControl
事件不会被触发,因为它保持空白。
要解决此问题,您可以考虑强制自己刷新控件。您可能需要覆盖包含OnAppearing
的第一页中的Refresh
方法,因为返回的页面已调用此方法覆盖。返回第一个页面后,将调用AdControl
,您可以执行某些操作以强制在此方法中刷新public MainPage()
{
InitializeComponent()
}
async void OnButtonClicked(object sender, EventArgs args)
{
await Navigation.PushAsync(new Page2());
}
protected override void OnAppearing()
{
base.OnAppearing();
InitializeComponent();
}
。例如,在这里我重新初始化将起作用的页面:
{{1}}
更多详情请参阅OnAppearing
。