Joseph Anderson
Joseph Anderson

Reputation: 4144

Windows 8 Emulator Snap State

How do I enter snap state using the Windows 8 emulator? I received a notice from the Windows 8 store that my software crashes in snap mode only. Does anyone know why switching modes would cause my software to crash? Here is my code behind:

namespace MenuFinderWin8.Pages
{

public sealed partial class RestaurantHomePage : MenuFinderWin8.Common.LayoutAwarePage
{
    MenuFinderAppServiceClient serviceClient;
    RestaurantRepository repository;
    Geolocator _geolocator = null;
    ObservableCollection<RestaurantLocation> items;

    public RestaurantHomePage()
    {
        this.InitializeComponent();
        if (!Network.IsNetwork())
        {
            return;
        }
        repository = new RestaurantRepository();
        serviceClient = new MenuFinderAppServiceClient();
        _geolocator = new Geolocator();
        items = new ObservableCollection<RestaurantLocation>();
        BindData();
    }

    void btnAbout_Click(object sender, RoutedEventArgs e)
    {
        Flyout f = new Flyout();
        LayoutRoot.Children.Add(f.HostPopup); // add this to some existing control in your view like the root visual

        // remove the parenting during the Closed event on the Flyout
        f.Closed += (s, a) =>
        {
            LayoutRoot.Children.Remove(f.HostPopup);
        };

        // Flyout is a ContentControl so set your content within it.
        SupportUserControl userControl = new SupportUserControl();
        userControl.UserControlFrame = this.Frame;
        f.Content = userControl;
        f.BorderBrush = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 223, 58, 51));
        f.Width = 200;
        f.Height = 200;
        f.Placement = PlacementMode.Top;
        f.PlacementTarget = sender as Button; // this is an UI element (usually the sender)

        f.IsOpen = true;
    }

    void btnSearch_Click(object sender, RoutedEventArgs e)
    {
        Flyout f = new Flyout();
        LayoutRoot.Children.Add(f.HostPopup); // add this to some existing control in your view like the root visual

        // remove the parenting during the Closed event on the Flyout
        f.Closed += (s, a) =>
        {
            LayoutRoot.Children.Remove(f.HostPopup);
        };

        // Flyout is a ContentControl so set your content within it.
        RestaurantSearchUserControl userControl = new RestaurantSearchUserControl();
        userControl.UserControlFrame = this.Frame;
        f.Content = userControl;
        f.BorderBrush = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 223, 58, 51));
        f.Width = 600;
        f.Height = 400;
        f.Placement = PlacementMode.Top;
        f.PlacementTarget = sender as Button; // this is an UI element (usually the sender)

        f.IsOpen = true;

    }

    void btnViewFavorites_Click(object sender, RoutedEventArgs e)
    {
        App.DataMode = Mode.SavedRestaurant;
        if (repository.GetGroupedRestaurantsFromDatabase().Count() == 0)
        {
            MessageDialog messageDialog = new MessageDialog("You have no saved restaurants.", "No Restaurants");
            messageDialog.ShowAsync();
        }
        else
        {
            this.Frame.Navigate(typeof(RestaurantSearchDetails));
        }
    }

    private async void BindData()
    {
        try
        {
            items = await serviceClient.GetSpecialRestaurantsAsync();



            List<RestaurantLocation> myFavs = repository.GetRestaurantLocations();
            foreach (var a in myFavs)
            {
                items.Add(a);
            }

            this.DefaultViewModel["Items"] = items;
        }
        catch (Exception)
        {
            MessageDialog messsageDialog = new MessageDialog("The MenuFinder service is unavailable at this time or you have lost your internet connection. If your internet is OK, please check back later.", "Unavailable");
            messsageDialog.ShowAsync();
            btnAbout.IsEnabled = false;
            btnSearch.IsEnabled = false;
            btnViewFavorites.IsEnabled = false;
        }
        myBar.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
    }


    /// <summary>
    /// Populates the page with content passed during navigation.  Any saved state is also
    /// provided when recreating a page from a prior session.
    /// </summary>
    /// <param name="navigationParameter">The parameter value passed to
    /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
    /// </param>
    /// <param name="pageState">A dictionary of state preserved by this page during an earlier
    /// session.  This will be null the first time a page is visited.</param>
    protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
    {
        // TODO: Assign a bindable collection of items to this.DefaultViewModel["Items"]
    }

    private void itemGridView_ItemClick_1(object sender, ItemClickEventArgs e)
    {
        App.CurrentRestaurantLocation = e.ClickedItem as RestaurantLocation;
        if (App.CurrentRestaurantLocation != null)
        {
            Order order = repository.AddOrder(DateTime.Now, string.Empty, App.CurrentRestaurantLocation.ID);
            App.CurrentOrder = order;
            App.DataMode = Mode.Menu;
            this.Frame.Navigate(typeof(RootViewPage));
        }
    }
}

}

Upvotes: 0

Views: 1487

Answers (2)

Jennifer Marsman - MSFT
Jennifer Marsman - MSFT

Reputation: 5225

In response to "How do I enter snap state using the Windows 8 emulator?" - I find the easiest way to snap in the simulator is to use the keyboard shortcut, which is Windows key + . (period).

Upvotes: 2

danielrozo
danielrozo

Reputation: 1442

The error might be in your XAML, more than in the code behind. If you used a template but deleted or modified the name in one of the elements, the KeyFrame refering to that element is failing getting the element, so an exception is thrown.

Search in your XAML for something like

<VisualState x:Name="Snapped">
                <Storyboard>...

And delete the ObjectAnimationUsingKeyFrames tags which Storyboard.TargetName property is equal to a non-existant element.

Refering on how to enter Snapped Mode on the emulator, is the same as in PC, just grab the App from the top and slide it to a side while holding the click.

Upvotes: 1

Related Questions