ApplicationBarIconButton is null

2020-05-30 09:08发布

Why is my 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>

The appBarSave object is null, and trying this:

Initialize Component();
appbarSave.IsEnabled = true;

Results in a NullReferenceException. The only place the object works is in the click event (if I enable it):

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

I would really like to be able to start the save button as disabled and enabled it later.

5条回答
做自己的国王
2楼-- · 2020-05-30 09:24

I do it so, example for change icon

ApplicationBarIconButton btn =  (ApplicationBarIconButton)ApplicationBar.Buttons[0];
btn.IconUri = new Uri("/images/play.png", UriKind.Relative);
查看更多
干净又极端
3楼-- · 2020-05-30 09:25

I remember running into this issue before: there's an explanation here. An easy workaround is just to instantiate it in code-behind rather than xaml (like here).

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;
}
查看更多
狗以群分
4楼-- · 2020-05-30 09:26

try this

Microsoft.Phone.Shell.ApplicationBarIconButton btn = ApplicationBar.Buttons[0] as Microsoft.Phone.Shell.ApplicationBarIconButton;
btn.IsEnabled = false;
查看更多
太酷不给撩
5楼-- · 2020-05-30 09:32

I made this mistake today, the x:Name is ignored.

The ApplicationBar is part of the page already, whether you create it in XAML or not. There is no need to create a new one. Just use the ApplicationBar property in the code behind file.

Initialize Component();
ApplicationBar.IsEnabled = true;
查看更多
孤傲高冷的网名
6楼-- · 2020-05-30 09:35

I use a bindable app bar control from here The download link is at the bottom of the article.

Makes life much easier and saves you from having to put code in the code behind.

查看更多
登录 后发表回答