Tech Off Post

Single Post Permalink

View Thread: Swapping application bars dynamically on Windows Phone 8
  • User profile image
    Mauricio Feijo

    Its 5:20 AM and I woke up at 4:45 with an approach that would make my life easier. Had to code it. It worked beautifully, so I had to blog it to get opinions and help others.

     

    The app I am working on have 2 states, and on each state the user will see a different set of buttons and menu items on the app bar.

    I didnt want to write the app bar completely in C#, for I always choose XAML over C# when possible. Otherwise we would just write it all in C#! 

    I started by creating the buttons as app resources in APP.XAML. Note that some buttons overlap both app bars, so this approach avoids having 2 buttons that do the same thing.

    <Application.Resources>
    <shell:ApplicationBarIconButton x:Key="ChooseButton" IconUri="/Images/ChooseButton.png" Text="choose">
    ...
    </shell:ApplicationBarIconButton>
    

     I then added both app bars to APP.XAML resource as well, referencing the buttons as StaticResources

    <shell:ApplicationBar x:Key="AppBarState1" IsVisible="True" Opacity="0.5">
    <shell:ApplicationBar.Buttons>
    <StaticResource ResourceKey="ChooseButton" />
    ...
    </shell:ApplicationBar.Buttons>
    </shell:ApplicationBar>
     
    

    Now on the page code behind comes the inevitable C#. I feel this is perfectly OK as it has to do with procedure and intelligence rather then declaration.

    
    var chooseButton = (ApplicationBarIconButton)App.Current.Resources["ChooseButton"];
    chooseButton.Click += ChooseButtonClick;
    ...
    

    After setting up the button handlers we will decide which app bar to show and assign it to the page's ApplicationBar property:

    ApplicationBar = (IApplicationBar)App.Current.Resources["AppBarState1"]; // choose based on app state
     
    

     I hope this helps some folks. If you think of a more elegant or appropriate way of achieving the same , please let us know.