Programmatically changing the appbar icons
application-bar, c#, icons, windows-phone, windows-phone-8
Solution
It seems that when you create AppBar in xaml, your reference to Button in code behind is null. I'm making my AppBar programatically and I've not spotted such problem:
ApplicationBar = new ApplicationBar();
ApplicationBar.Mode = ApplicationBarMode.Default;
ApplicationBar.IsMenuEnabled = false;
ApplicationBarIconButton addBtn = new ApplicationBarIconButton(new Uri("BarIcons/add.png", UriKind.Relative));
addBtn.Text = "Add";
addBtn.Click += addBtn_Click;
ApplicationBarIconButton infoBtn = new ApplicationBarIconButton(new Uri("BarIcons/info.png", UriKind.Relative));
infoBtn.Text = "Info";
infoBtn.Click += infoBtn_Click;
ApplicationBar.Buttons.Add(addBtn);
ApplicationBar.Buttons.Add(infoBtn);
You can also add menu items there and what you want. Then if you ApplicationBarIconButton is 'global' variable, you can change it any time, and it works. EDIT - some explanations Here I've found similar problem, and at this blog is explanation. There is also a code which works:
Microsoft.Phone.Shell.ApplicationBarIconButton btn = ApplicationBar.Buttons[0] as Microsoft.Phone.Shell.ApplicationBarIconButton;
btn.IconUri = backIcon;
btn.Text = "My button";
Problem
In my C# Windows Phone 8 app, I have an AppBar. I have two icons on this AppBar, one new icon, and one edit icon. I want to change the edit icon, to the back icon whenever it is pressed, and then back to the edit icon whenever it is pressed again. I have tried this code, but I get a nullReferenceException: ``` public static Uri addIcon = new Uri("/Assets/AppBar/new.png", UriKind.Relative); public static Uri backIcon = new Uri("/Assets/AppBar/back.png", UriKind.Relative); //Edit the projects if (editMode.Equals(false)) { //EditMode is off, enable edit mode and modify the editprojectMenuButton editMode = true; editprojectMenuButton.IconUri = backIcon; editprojectMenuButton.Text = "finish"; } else { //EditMode is on, disable edit mode and modify the editprojectMenubutton editMode = false; editprojectMenuButton.IconUri = addIcon; editprojectMenuButton.Text = "edit"; } ``` Xaml code: ``` <phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> <shell:ApplicationBarIconButton x:Name="editprojectMenuButton" IconUri="/Assets/AppBar/edit.png" Text="Edit" Click="editprojectMenuButton_Click"/> <shell:ApplicationBarIconButton x:Name="addprojectMenuButton" IconUri="/Assets/AppBar/new.png" Text="Add" Click="addprojectMenuButton_Click"/> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem x:Name="aboutButton" Text="About" Click="aboutButton_Click"/> <shell:ApplicationBarMenuItem x:Name="howtoButton" Text="How To" Click="howtoButton_Click"/> </shell:ApplicationBar.MenuItems> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar> ``` Alternate AppBar Code: ``` //Create the AppBar ApplicationBar = new ApplicationBar(); ApplicationBar.Mode = ApplicationBarMode.Default; ApplicationBar.IsMenuEnabled = true; addprojectMenuBtn = new ApplicationBarIconButton(new Uri("BarIcons/add.png", UriKind.Relative)); addprojectMenuBtn.Text = "add"; addprojectMenuBtn.Click += addprojectMenuButton_Click; editprojectMenuBtn = new ApplicationBarIconButton(new Uri("BarIcons/edit.png", UriKind.Relative)); editprojectMenuBtn.Text = "add"; editprojectMenuBtn.Click += editprojectMenuButton_Click; ApplicationBar.Buttons.Add(addprojectMenuBtn); ApplicationBar.Buttons.Add(editprojectMenuBtn); ```