ApplicationBarIconButton равен нулю - PullRequest
21 голосов
/ 17 марта 2011

Почему мой ApplicationBarIconButton null?

<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" x:Name="appBar">
        <shell:ApplicationBarIconButton x:Name="appbarSave"
          IconUri="/Icons/appbar.save.rest.png Text="Save" IsEnabled="False"
          Click="appbarSave_Click" />
    </shell:Application Bar>
</phone:PhoneApplicationPage.ApplicationBar>

Объект appBarSave имеет значение null и пытается это:

Initialize Component();
appbarSave.IsEnabled = true;

Результат в исключении NullReferenceException. Единственное место, где работает объект, - это событие click (если я его включу):

private void appbarSave_Click(object sender, EventArgs e)
{
    ApplicationBarIconButton button = (ApplicationBarIconButton)sender;
    button.IsEnabled = false;
}

Мне бы очень хотелось, чтобы кнопка «Сохранить» была отключена и включена позже.

Ответы [ 5 ]

18 голосов
/ 17 марта 2011

Я помню, как сталкивался с этой проблемой раньше: здесь есть объяснение .Простой обходной путь - просто создать его в коде, а не в xaml (например, здесь ).

private ApplicationBarIconButton SaveEdit;
private void InitAppBar()
{
     ApplicationBar appBar = new ApplicationBar();

     SaveEdit = new ApplicationBarIconButton(new Uri("images/appbar.check.rest.png", UriKind.Relative));
     SaveEdit.Click += new EventHandler(OnClick_Check);
     SaveEdit.Text = Strings.Save_button;
     appBar.Buttons.Add(SaveEdit);

     ApplicationBarIconButton CancelEdit = new ApplicationBarIconButton(new Uri("images/appbar.close.rest.png", UriKind.Relative));
     CancelEdit.Click += new EventHandler(OnClick_Cancel);
     CancelEdit.Text = Strings.Cancel_button;
     appBar.Buttons.Add(CancelEdit);

     ApplicationBar = appBar;
}
17 голосов
/ 07 июня 2012

попробуйте

Microsoft.Phone.Shell.ApplicationBarIconButton btn = ApplicationBar.Buttons[0] as Microsoft.Phone.Shell.ApplicationBarIconButton;
btn.IsEnabled = false;
1 голос
/ 28 мая 2012

Я сделал эту ошибку сегодня, x: Name игнорируется.

ApplicationBar уже является частью страницы, независимо от того, создаете ли вы ее в XAML или нет.Нет необходимости создавать новый.Просто используйте свойство ApplicationBar в коде файла.

Initialize Component();
ApplicationBar.IsEnabled = true;
1 голос
/ 17 марта 2011

Я использую привязываемый элемент управления панели приложений отсюда Ссылка для скачивания находится внизу статьи.

Делает жизнь намного проще и избавляет вас от необходимости помещать код в код позади.

0 голосов
/ 11 июня 2012

Я делаю это так, пример для значка изменения

ApplicationBarIconButton btn =  (ApplicationBarIconButton)ApplicationBar.Buttons[0];
btn.IconUri = new Uri("/images/play.png", UriKind.Relative);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...