2012-06-11 35 views
5

Đầu tiên, một ảnh chụp màn hình:Windows 8 quảng cáo hiển thị trên đầu trang của các thiết lập flyout

ad from main view showing up on settings flyout

Tiêu đề và hình ảnh giải thích nó khá tốt. Tôi có một bộ quảng cáo ở phía bên phải của chế độ xem nhóm chính của ứng dụng của tôi (rất giống với mẫu lưới mặc định trong ví dụ này) và khi tôi kéo màn hình Giới thiệu, quảng cáo sẽ chảy qua.

Màn hình Giới thiệu là bộ điều khiển người dùng được đặt trên SettingsFlyout mà tôi đã mượn từ một số mẫu mã được phát tại một trại phát triển (bên dưới).

class SettingsFlyout 
{ 
    private const int _width = 346; 
    private Popup _popup; 

    public void ShowFlyout(UserControl control) 
    { 
     _popup = new Popup(); 
     _popup.Closed += OnPopupClosed; 
     Window.Current.Activated += OnWindowActivated; 
     _popup.IsLightDismissEnabled = true; 
     _popup.Width = _width; 
     _popup.Height = Window.Current.Bounds.Height; 

     control.Width = _width; 
     control.Height = Window.Current.Bounds.Height; 

     _popup.Child = control; 
     _popup.SetValue(Canvas.LeftProperty, Window.Current.Bounds.Width - _width); 
     _popup.SetValue(Canvas.TopProperty, 0); 
     _popup.IsOpen = true; 
    } 

    private void OnWindowActivated(object sender, Windows.UI.Core.WindowActivatedEventArgs e) 
    { 
     if (e.WindowActivationState == Windows.UI.Core.CoreWindowActivationState.Deactivated) 
     { 
      _popup.IsOpen = false; 
     } 
    } 

    void OnPopupClosed(object sender, object e) 
    { 
     Window.Current.Activated -= OnWindowActivated; 
    } 
} 

Và, bởi vì tôi biết nó sẽ được yêu cầu, đây là dòng của XAML định quảng cáo trên trang của mình:

<ads:AdControl Visibility="{Binding IsTrial, Source={StaticResource License}, Converter={StaticResource BooleanToVisibilityConverter}}" Grid.Row="0" Grid.RowSpan="2" x:Name="LandscapeAdControl" ApplicationId="test_client" AdUnitId="Image_160x600" Width="160" Height="600" VerticalAlignment="Center" HorizontalAlignment="Right"/> 

Vì vậy, tại sao điều này xảy ra, và làm cách nào để ngăn chặn nó?

Nghi ngờ

  1. tôi vẫn đang trên Consumer Preview b/c tôi có một show-và-nói thứ hai và không có thời gian để làm việc về di chuyển hệ điều hành trên hộp này mà không sợ con người không hoạt động khi tôi hiển thị điều này. Như vậy, việc nâng cấp có thể khắc phục nếu đó là lỗi.

    1.a. Cập nhật Tôi đã nâng cấp lên Bản xem trước bản phát hành và có cùng sự cố.

  2. Có một số kỹ thuật ngăn chặn quảng cáo ẩn-nhưng-vẫn-được-hiển thị ưa thích khi chơi ở đây không? Có lẽ nó nghĩ rằng tôi đang cố gắng để trang trải các quảng cáo với một yếu tố ui và vẫn nhận được tín dụng cho ấn tượng của nó mà không cần người dùng nhìn thấy nó. Nếu vậy, làm cách nào để quản lý trường hợp sử dụng hoàn toàn hợp pháp này?

Cảnh báo Spoiler: ZIndex không được đặt ở bất kỳ đâu.

+0

SDK quảng cáo cho Xem trước người tiêu dùng có vấn đề về không gian. Phát hành quảng cáo xem trước sdk có thể sửa chữa nó, nhưng tôi sẽ không giữ hơi thở của tôi. Bạn có thể sẽ phải tìm cách giải quyết bằng cách ẩn quảng cáo sau đó cửa sổ bật lên hoặc flyouts đang hoạt động hoặc một cái gì đó như thế. – Denis

Trả lời

1

Tôi đã kết thúc tạo một số mã để nghe sự kiện trên flyout khi nó đóng để tôi có thể hiển thị quảng cáo theo cách thủ công. Thật không may là tôi phải làm một cách giải quyết, nhưng nó hoạt động.

-3

tôi vẫn còn trên Consumer Preview b/c tôi có một show-và-nói thứ hai và không có thời gian để làm việc về di chuyển hệ điều hành trên hộp này mà không mạo hiểm là không có chức năng khi tôi cho thấy điều này. Do đó, việc nâng cấp có thể khắc phục nếu đó là lỗi.

Tôi chưa sử dụng bất kỳ quảng cáo nào trong các ứng dụng tàu điện ngầm của riêng mình, vì vậy tôi chưa thấy bất kỳ sự cố nào xảy ra như vậy. Tôi đang sử dụng Bản xem trước bản phát hành và đã sử dụng Xem trước người tiêu dùng trước ngày 2 tháng 5.

Có một số thay đổi đáng kể giữa Xem trước người tiêu dùng và Xem trước bản phát hành. Như vậy, việc nâng cấp có thể khắc phục sự cố này hoặc việc này có thể gây ra sự cố khác.

Bạn sẽ phải nâng cấp cuối cùng. Tôi khuyên bạn nên thử trước khi bạn cố gắng giải quyết vấn đề.

+0

Tôi hoàn toàn có ý định nâng cấp, nhưng tôi chưa có. Bạn đã sử dụng điều khiển quảng cáo với cửa sổ bật lên xuất hiện trên đầu trang của nó chưa? Liệu nó chảy qua hoặc ẩn? –

+0

Tôi đã thực hiện nâng cấp lên Bản xem trước bản phát hành và nó vẫn là một vấn đề. –

2

Trình bày cùng một vấn đề với lớp phủ AppBar (trên cùng hoặc dưới cùng).Tôi đã sử dụng các sự kiện OpenedClosed trên cá thể AppBar để ẩn/hiển thị quảng cáo. Điều này có nghĩa là AdControl bị ràng buộc vào một thuộc tính trang cục bộ thay vì liên kết trực tiếp với một ViewModel. Như bạn đã nói, nó không may nhưng nó hoạt động.

private void bottomAppBar_Opened(object sender, object e) 
    { 
     if (App.ViewModel.IsTrialVisibility == Visibility.Visible) 
      this.DefaultViewModel["AdVisibility"] = Visibility.Collapsed; 
     // else do nothing as we don't want to show it since it's not a trial 
    } 

    private void bottomAppBar_Closed(object sender, object e) 
    { 
     if(App.ViewModel.IsTrialVisibility == Visibility.Visible) 
      this.DefaultViewModel["AdVisibility"] = Visibility.Visible; 
     // else do nothing as it's not shown in the first place (not a trial) 
    } 
2

Có một tài sản trên AdControl tên: UseStaticAnchor

Thiết khách sạn này là true sẽ sửa chữa tất cả các vấn đề hiệu suất với di chuyển, cũng như AdControl vẽ trên đầu trang của tất cả mọi thứ khác.

Original câu trả lời - Phương pháp này hiện nay đã lỗi thời:

Các AdControl có hai phương pháp trên đó: Suspend()Resume(). Bất cứ khi nào bạn mở cửa sổ bật lên hoặc AppBar, bạn sẽ muốn gọi Suspend()Resume() khi đóng lại.

Tôi tin rằng dưới bìa, AdControl sử dụng một WebView để hiển thị quảng cáo. Vì lý do gì, một số WebView sẽ luôn hiển thị trên tất cả mọi thứ khác trong ứng dụng của bạn. Khắc phục sự cố này là tạm thời vô hiệu hóa WebView và thay vào đó hiển thị WebViewBrush. (Kỹ thuật này được mô tả ở đây: http://msdn.microsoft.com/library/windows/apps/windows.ui.xaml.controls.webviewbrush) Vì vậy, khi bạn gọi Suspend() và Resume(), AdControl đang thực hiện việc này dưới trang bìa.

Điều tôi đã làm là tạo UserControl (tên SuspendingAdControl) chỉ đơn giản chứa AdControl và có thể được sử dụng ở bất cứ đâu trong ứng dụng. Sau đó, mỗi khi một cửa sổ được mở hoặc đóng, tôi sử dụng EventAggregator của Caliburn Micro để xuất bản một sự kiện. SuspendingAdControl sẽ đăng ký và xử lý các sự kiện này, sau đó gọi một cách thích hợp AdControl.Suspend() hoặc Resume().

0

Hiện tại không có điều gì là cần thiết, vì flyout trong 8.1 bây giờ nằm ​​ở đầu đơn đặt hàng Z.

Các vấn đề liên quan