UserControlにブートストラッパーを配置しているので、PhoneApplicationService
おそらくすでにインスタンス化されているようです-ブーストラッパーをアプリリソースセクションに配置してみましたか?
CMソースはPhoneApplicationService
、ブートストラッパーが初期化するときにCMが新しいインスタンスを作成することを示しています。これは問題のように見えますが、アプリケーションのルートはすでにインスタンスを作成している必要があります。
(アプリリソースで)標準的な方法でブーストラッパーを使用できない理由はありますか?App.xamlにのイニシャライザーが含まれていますPhoneApplicationService
か?
編集:
エラーが発生しているCMソースはにありますPrepareApplication
。例えば
protected override void PrepareApplication() {
base.PrepareApplication();
phoneService = new PhoneApplicationService();
phoneService.Activated += OnActivate;
phoneService.Deactivated += OnDeactivate;
phoneService.Launching += OnLaunch;
phoneService.Closing += OnClose;
Application.ApplicationLifetimeObjects.Add(phoneService);
if (phoneApplicationInitialized) {
return;
}
RootFrame = CreatePhoneApplicationFrame();
RootFrame.Navigated += OnNavigated;
phoneApplicationInitialized = true;
}
おそらくこれをサブクラス化して、新しいPhoneApplicationServiceを作成せずに、既存のPhoneApplicationServiceを再利用することで解決できます。
/// <summary>
/// A custom bootstrapper designed to setup phone applications.
/// </summary>
public class CustomPhoneBootstrapper : Bootstrapper {
bool phoneApplicationInitialized;
PhoneApplicationService phoneService;
/// <summary>
/// The root frame used for navigation.
/// </summary>
public PhoneApplicationFrame RootFrame { get; private set; }
/// <summary>
/// Provides an opportunity to hook into the application object.
/// </summary>
protected override void PrepareApplication(PhoneApplicationService phoneAppService, PhoneApplicationFrame rootFrame) {
base.PrepareApplication();
phoneService = phoneAppService;
phoneService.Activated += OnActivate;
phoneService.Deactivated += OnDeactivate;
phoneService.Launching += OnLaunch;
phoneService.Closing += OnClose;
Application.ApplicationLifetimeObjects.Add(phoneService);
if (phoneApplicationInitialized) {
return;
}
RootFrame = rootFrame;
RootFrame.Navigated += OnNavigated;
phoneApplicationInitialized = true;
}
void OnNavigated(object sender, NavigationEventArgs e) {
if (Application.RootVisual != RootFrame) {
Application.RootVisual = RootFrame;
}
}
/// <summary>
/// Occurs when a fresh instance of the application is launching.
/// </summary>
protected virtual void OnLaunch(object sender, LaunchingEventArgs e) { }
/// <summary>
/// Occurs when a previously tombstoned or paused application is resurrected/resumed.
/// </summary>
protected virtual void OnActivate(object sender, ActivatedEventArgs e) { }
/// <summary>
/// Occurs when the application is being tombstoned or paused.
/// </summary>
protected virtual void OnDeactivate(object sender, DeactivatedEventArgs e) { }
/// <summary>
/// Occurs when the application is closing.
/// </summary>
protected virtual void OnClose(object sender, ClosingEventArgs e) { }
}
免責事項:私はWindows Phoneを開発したことがないので、これが機能するかどうかはわかりませんが、元のブートストラッパーが実行したことを実行する必要がありますが、アプリケーションとルートフレームの作成をスキップします。アプリとルートフレームを提供する必要があります(または、アプリケーションオブジェクトからルートフレームを取得できる場合はアプリだけです-私が言ったように、何が可能かわかりません)