2016-07-25 50 views
0

嗨我在我的UWP应用程序中使用微软广告,我希望广告调整后的应用程序,但无法得到它的工作。 我明白广告控制必须在有效的尺寸(如描述here),所以我写了这个代码,以调整广告:调整微软广告大小

private void panel_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    if (e.NewSize.Width >= 728) 
    { 
     ad.Width = 728; 
     ad.Height = 90; 
    } 
    else if (e.NewSize.Width >= 640) 
    { 
     ad.Width = 640; 
     ad.Height = 100; 
    } 
    else if (e.NewSize.Width >= 480) 
    { 
     ad.Width = 480; 
     ad.Height = 80; 
    } 
    else if (e.NewSize.Width >= 320) 
    { 
     ad.Width = 320; 
     ad.Height = 50; 
    } 
    else if (e.NewSize.Width >= 300) 
    { 
     ad.Width = 300; 
     ad.Height = 50; 
    } 
} 

这使得控制相应的调整,但在控制内的广告看起来可怕。我加了ad.Refresh();在最后,但这并没有改变一件事。

有谁知道该怎么办?

回答

1

我遇到了同样的问题。 不幸的是,广告每隔30秒加载一次,你无法在30秒内再刷新一次。 这是因为对Refresh()方法的调用失败。 我使用了一种解决方法,希望它能帮助您。 我用广告的相同大小(和位置)的StackPanel“覆盖”广告。我必须更改广告的尺寸时才显示此面板。 在广告刷新时(您可以通过回调AdRefreshed拦截它),我已隐藏了封面。

<StackPanel x:Name="AdsCover" Width="300" Height="50" Visibility="Visible" 
        Grid.Column="0" Grid.ColumnSpan="3" HorizontalAlignment="Left" VerticalAlignment="Bottom" Canvas.ZIndex="12" Background="WhiteSmoke"> 
      <Border x:Name="AdsBorder" BorderBrush="{x:Null}" Height="50"> 
       <TextBlock x:Name="AdsLoading" Text="Ads Loading..." HorizontalAlignment="Center" FontStyle="Italic" FontFamily="Calibri" FontSize="24" 
         TextAlignment="Center" VerticalAlignment="Center"/> 
      </Border> 
     </StackPanel> 
     <UI:AdControl x:Name="adsMS" 
       ApplicationId="3f83fe91-d6be-434d-a0ae-7351c5a997f1" 
       AdUnitId="10865270" 
       HorizontalAlignment="Left" 
       Height="50" 
       VerticalAlignment="Bottom" 
       Width="300" 
       Grid.Column="0" Grid.ColumnSpan="3" 
       Canvas.ZIndex="10" 
       ErrorOccurred="OnAdErrorOccurred" 
       AdRefreshed="OnAdRefreshed"/> 

在后面的代码,在那里你必须改变广告的大小,你可以这样做:

... 
    // Change the size of the Ad. adsW and adsH are the new size 
    adsMS->SetValue(WidthProperty, 1.0*adsW); 
    adsMS->SetValue(HeightProperty, 1.0*adsH); 
    // Cover panel with the same size 
    AdsCover->SetValue(WidthProperty, 1.0*adsW); 
    AdsCover->SetValue(HeightProperty, 1.0*adsH); 
    AdsBorder->SetValue(HeightProperty, 1.0*adsH); 

    // If the size are changed, I hide the Ad with the panel. 
    // In this way, I can avoid to see the deformed Ad. 
    // m_previousAdsWidth and m_previousAdsHeight are the previous size 
    // of the Ad. 
    if ((m_previousAdsWidth != adsW || m_previousAdsHeight != adsH) 
     && m_previousAdsWidth > 0 && m_previousAdsHeight > 0) 
    { 
     AdsCover->SetValue(VisibilityProperty, Windows::UI::Xaml::Visibility::Visible); 
    } 
    m_previousAdsWidth = adsW; 
    m_previousAdsHeight = adsH; 
    ... 

在OnAdRefreshed回调(),您可以隐藏面板

// Called when the Ad is refreshed. 
void DirectXPage::OnAdRefreshed(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) 
{ 
    // If the Ad is hidden by the cover panel, I will make it visible again. 
    if (AdsCover->Visibility == Windows::UI::Xaml::Visibility::Visible) 
     AdsCover->SetValue(VisibilityProperty, Windows::UI::Xaml::Visibility::Collapsed); 
} 
+0

这有点帮助我,谢谢! –