using:Microsoft.Advertising.WinRT.UIの AdControl がズッコける原因ということで、C++プログラマにはStoreServiceの恩恵はいまだにたどり着けない状況でございます。なので、C#に行こうかとも思いますが、Objective Cとの関係でできるだけC++で書きたいのですよん。そんな中でよくこけるのが「Microsoft.Advertising」の「AdControl」のErrorOccurredイベントがXamlエディタで「定義されてない。」と文句を言われる。
しかし、文句を言われて、無効なマークアップと表示されませんが?なぜか?ビルドするときっちりコードが生成され、無効なデータをサーバーに送ってErrorOccurredイベントを起こしてもきっちりErrorOccurredイベントは動いているのがわかるんですよ。
これが発生する場合としない場合があったので、頭を抱えていたのですが、発生する原因が、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エディタが動いています。(^^)