Archive for 10月 14th, 2016

Microsoft.Advertisingの AdControl がズッコける原因(C++)

金曜日, 10月 14th, 2016

 
using:Microsoft.Advertising.WinRT.UIの AdControl がズッコける原因ということで、C++プログラマにはStoreServiceの恩恵はいまだにたどり着けない状況でございます。なので、C#に行こうかとも思いますが、Objective Cとの関係でできるだけC++で書きたいのですよん。そんな中でよくこけるのが「Microsoft.Advertising」の「AdControl」のErrorOccurredイベントがXamlエディタで「定義されてない。」と文句を言われる。

しかし、文句を言われて、無効なマークアップと表示されませんが?なぜか?ビルドするときっちりコードが生成され、無効なデータをサーバーに送ってErrorOccurredイベントを起こしてもきっちりErrorOccurredイベントは動いているのがわかるんですよ。

%e7%84%a1%e9%a1%8c

これが発生する場合としない場合があったので、頭を抱えていたのですが、発生する原因が、Xamlの最初に

<Page.Resources>
<MenuFlyout x:Name="PopUpFlyoutBase" x:Key="PopUpFlyoutBase">
<MenuFlyoutItem Text="印刷" HorizontalAlignment="Center"  Tag="1" Click="MenuFlyoutItem_Click9" />

などという、Page.ResourcesのタグにMenuFlyout MenuFlyoutItem を入れると、AdControlのErrorOccurredイベントが定義されていない。とほざかれることになります。

とはいっても、Page.ResourcesにMenuFlyout MenuFlyoutItemを使わないことはありえないので、しかし、ビルドの度にErrorOccurredイベントを設定するのもしんどいです。Xamlエディタが使えないと仕事にならないし、

ということで、良い方法はないかと思ったら、以下の方法がありました。
XamlページのコンストラクタでErrorOccurredイベントを設定するというもの

こんな感じ

ad1->ErrorOccurred += ref new EventHandler<Microsoft::Advertising::WinRT::UI::AdErrorEventArgs^>(this, &DirectXPage::ad1_ErrorOccurred);

もちろん、XamlのErrorOccurredは消しておく。

とりあえず。こんな感じで無事に、Xamlエディタが動いています。(^^)