Поскольку вы размещаете загрузчик в UserControl, кажется, что PhoneApplicationService
, вероятно, уже создан - пробовали ли вы поместить загрузчик в раздел ресурсов приложения?
Источник CM показывает, что CM создает новый экземпляр PhoneApplicationService
при инициализации загрузчика, и это похоже на проблему: корень вашего приложения должен уже создать экземпляр.
Есть ли причина, по которой вы не можете использовать ускоритель стандартным способом (в ресурсах приложения)? Содержит ли ваш 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, а повторно использовать существующий:
/// <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, но, насколько я понимаю, это должно делать то же, что и исходный загрузчик, но пропустить создание приложения и корневого фрейма. Вам просто нужно предоставить приложение и корневой фрейм (или, может быть, только приложение, если вы можете получить корневой фрейм из объекта приложения - как я уже сказал, понятия не имею, что возможно)
person
Charleh
schedule
20.12.2012