forms - Xamarin Forms 中的 PopAsync 后 UWP AdControl 空白
问题描述
使用 Microsoft Advertising AdControl 的 Xamarin Forms 项目。打开页面时控件可以正常工作,但是在页面顶部的 PopAsync 之后再次显示页面时,AdControl 为空白,之后保持空白。
我在这里发现了一个似乎关于同一主题的老问题,但我无法使用答案和评论。
当具有 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?
解决方案
通过在我这边测试,当第二个页面调用时PopAsync()
,第二个页面实例从导航堆栈中删除,新的最顶层页面成为活动页面,但似乎当前最顶层页面不会创建新实例,而是缓存旧实例。这应该符合预期,但您的AdControl
也没有刷新,并且不会触发它保持空白的Refresh
事件。AdControl
要解决此问题,您可以考虑自行强制刷新控件。您可能需要覆盖OnAppearing
包含 的第一页中的方法AdControl
,因为要返回的页面已调用此方法覆盖。一旦返回的第一页将被调用,您可以在此方法中根据需要OnAppearing
执行一些操作来强制刷新。AdControl
例如,在这里我重新初始化将工作的页面:
public MainPage()
{
InitializeComponent()
}
async void OnButtonClicked(object sender, EventArgs args)
{
await Navigation.PushAsync(new Page2());
}
protected override void OnAppearing()
{
base.OnAppearing();
InitializeComponent();
}
更多细节请参考本文档。
推荐阅读
- python - 从两个都包含列矩阵的列表中减去相应的元素
- swift - Firebase - 按下侧按钮时触发 onDisconnectSetValue()
- node.js - Mongo/Node:按单个属性过滤?
- python - 如何使用 numpy 数组找到具有最小 MSE 的值?
- python - 基于所有行值的 Numpy 过滤
- css - 媒体查询相互矛盾
- arrays - 如何使用 AWS Athena - Presto 从 NESTED JSON 中的特定字段中提取数据?
- php - PHP(Laravel):转换数字
- django - 如何使用 SQL 和 Django 中另一个表中的字段创建 WHERE 子句?
- javascript - 反应类不渲染