Почему этот элемент не найден?
Я добавил код в свой проект приложения Магазина Windows, чтобы использовать панель "Настройки" для пользовательских настроек приложения. Я основал этот код на том, что написано в книге Адама Натана "Приложения для Windows 8 с XAML и C#", начиная с p. 503.
У меня есть этот код в App.xaml.cs:
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested;
UnhandledException += Application_UnhandledException;
}
private void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs spcreArgs)
{
spcreArgs.Request.ApplicationCommands.Add(new SettingsCommand(1, "App Bar Color", OnSettingsCommand));
spcreArgs.Request.ApplicationCommands.Add(new SettingsCommand(2, "Visit Types to Display", OnSettingsCommand));
spcreArgs.Request.ApplicationCommands.Add(new SettingsCommand(3, "Display Current Location", OnSettingsCommand));
spcreArgs.Request.ApplicationCommands.Add(new SettingsCommand(4, "Set Home Base", OnSettingsCommand));
}
private void OnSettingsCommand(Windows.UI.Popups.IUICommand command)
{
int id = (int) command.Id;
switch (id)
{
case 1:
//Bla => I think this is where I need to add "this.[custom settings pane (user control) name].Show(command)
break;
case 2:
//Bla
break;
case 3:
//Bla
break;
case 4:
//Bla
break;
}
}
... но происходит сбой в строке "SettingsPane.GetForCurrentView (). CommandsRequested + = OnCommandsRequested;" с:
System.Exception was unhandled by user code
HResult=-2147023728
Message=Element not found. (Exception from HRESULT: 0x80070490)
Source=Windows.UI
StackTrace:
at Windows.UI.ApplicationSettings.SettingsPane.GetForCurrentView()
at Visits.App..ctor()
at Visits.Program.<Main>b__0(ApplicationInitializationCallbackParams p)
InnerException:
Когда я просматриваю подробную информацию об исключении, я вижу:
В чем здесь проблема?
1 ответ
В твоем случае SettingsPane.GetForCurrentView()
создает исключение, потому что вы называете это слишком рано. Вы настраиваете параметры для определенного представления, но в конструкторе приложения еще нет представления, следовательно Element not found
,
Переместите свой код на страницу, ничего не меняя, и он будет работать:
public MainPage()
{
this.InitializeComponent();
SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested;
}
private void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs spcreArgs)
{
spcreArgs.Request.ApplicationCommands.Add(new SettingsCommand(1, "App Bar Color", OnSettingsCommand));
spcreArgs.Request.ApplicationCommands.Add(new SettingsCommand(2, "Visit Types to Display", OnSettingsCommand));
spcreArgs.Request.ApplicationCommands.Add(new SettingsCommand(3, "Display Current Location", OnSettingsCommand));
spcreArgs.Request.ApplicationCommands.Add(new SettingsCommand(4, "Set Home Base", OnSettingsCommand));
}
private void OnSettingsCommand(Windows.UI.Popups.IUICommand command)
{
int id = (int)command.Id;
switch (id)
{
case 1:
//Bla => I think this is where I need to add "this.[custom settings pane (user control) name].Show(command)
break;
case 2:
//Bla
break;
case 3:
//Bla
break;
case 4:
//Bla
break;
}
}