Подтвердить что ты не робот

ApplicationBarIconButton имеет значение null

Почему мой 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. Единственное место, где объект работает, находится в событии клика (если я его включаю):

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

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

4b9b3361

Ответ 1

Я помню, как раньше сталкивался с этой проблемой: здесь объяснение здесь. Легкое обходное решение - это просто создать экземпляр кода вместо кода 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;
}

Ответ 2

попробуйте это

Microsoft.Phone.Shell.ApplicationBarIconButton btn = ApplicationBar.Buttons[0] as Microsoft.Phone.Shell.ApplicationBarIconButton;
btn.IsEnabled = false;

Ответ 3

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

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

Ответ 4

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

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

Initialize Component();
ApplicationBar.IsEnabled = true;

Ответ 5

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

ApplicationBarIconButton btn =  (ApplicationBarIconButton)ApplicationBar.Buttons[0];
btn.IconUri = new Uri("/images/play.png", UriKind.Relative);