2013-11-29 2 views
5

В моем приложении C# для Windows Phone 8 у меня есть AppBar. У меня есть два значка в этом AppBar, один новый значок и один значок редактирования. Я хочу изменить значок редактирования, на задний значок при каждом нажатии, а затем вернуться к значку редактирования при каждом нажатии. Я попробовал этот код, но я получаю 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 код:

<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> 

Альтернативные AppBar Код:

  //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); 
+0

Можете ли вы показать еще какой-то код? Я думаю, вероятно, у вас есть ваша локальная переменная, поэтому, когда вы попытаетесь изменить ее позже (например, из метода), вы получаете исключение NullReference. – Romasz

+0

Я не знаю, правильно ли я понял ваш вопрос, но я добавил панель приложений в xaml. Я добавил код xaml – Erik

+0

На какой линии вы получаете Исключение? – Andy

ответ

2

кажется, что при создании AppBar в XAML, ваша ссылка на Button в коде позади равна null.
Я делаю свою AppBar и программно я не заметил такую ​​проблему:

 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); 

Вы также можете добавить пункты меню там и то, что вы хотите. Тогда, если вы ApplicationBarIconButton - это глобальная переменная, вы можете изменить ее в любое время, и она работает.

EDIT - некоторые объяснения
Here я нашел подобную проблему, и at this blog это объяснение.

Существует также код, который работает:

Microsoft.Phone.Shell.ApplicationBarIconButton btn = ApplicationBar.Buttons[0] as Microsoft.Phone.Shell.ApplicationBarIconButton; 
btn.IconUri = backIcon; 
btn.Text = "My button"; 
+0

Я создал панель приложений с кодом, который я добавил выше, и поместил его внутри общего метода MainPage() перед вызовом метода InitializeComponent(). но он не показывает AppBar – Erik

+0

Вы пытались использовать InitializeComponent? Я также добавил метод для получения тех, которые были созданы в xaml. – Romasz

+0

Я пробовал да, не работал. Наверное, это просто крошечный тио или что-то в этом роде. Ваш последний код работал отлично, спасибо! – Erik

Смежные вопросы