private void CreateAddProductGrid(object sender, RoutedEventArgs e)
        {
            buttonClickGrid.Children.Clear();

            // main grid for adding products
            Grid addProductGrid = new Grid();

            addProductGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            addProductGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            addProductGrid.ColumnDefinitions.Add(new ColumnDefinition());
            addProductGrid.ColumnDefinitions.Add(new ColumnDefinition());
            addProductGrid.ColumnDefinitions.Add(new ColumnDefinition());
            buttonClickGrid.Children.Add(addProductGrid);

            Grid availableImagesGrid = new Grid();

            availableImagesGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            availableImagesGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            availableImagesGrid.RowDefinitions.Add(new RowDefinition());
            availableImagesGrid.ColumnDefinitions.Add(new ColumnDefinition());
            addProductGrid.Children.Add(availableImagesGrid);
            Grid.SetColumn(availableImagesGrid, 1);
            Grid.SetRow(availableImagesGrid, 0);

            TextBlock addProductHeader = ShopUtils.CreateTextBlock("Urval för bilder", 14, TextAlignment.Center);

            availableImagesGrid.Children.Add(addProductHeader);
            Grid.SetRow(addProductHeader, 0);
            Grid.SetColumn(addProductHeader, 1);

            Button addToImageBox = ShopUtils.CreateButton("Lägg till sökväg");

            addToImageBox.MaxWidth = 120;
            availableImagesGrid.Children.Add(addToImageBox);
            Grid.SetRow(addToImageBox, 1);
            Grid.SetColumn(addToImageBox, 1);
            addToImageBox.Click += AddToImageBox;

            // A ListBox containing available sample images and displaying them using the selectionchanged event
            pictureListBox = new ListBox
            {
                Margin              = new Thickness(5),
                VerticalAlignment   = VerticalAlignment.Stretch,
                HorizontalAlignment = HorizontalAlignment.Stretch,
                MaxHeight           = 300,
                MaxWidth            = 300,
                MinWidth            = 300,
                MinHeight           = 300,
                Background          = listBoxBrush,
                Foreground          = Brushes.White,
                BorderThickness     = new Thickness(0),
                FontWeight          = FontWeights.SemiBold
            };
            availableImagesGrid.Children.Add(pictureListBox);
            Grid.SetRow(pictureListBox, 2);
            Grid.SetColumn(pictureListBox, 1);
            pictureListBox.SelectionChanged += DisplayPicture;

            for (int i = 0; i < imageArray.Length; i++)
            {
                pictureListBox.Items.Add("Bildförslag " + (i + 1));
            }

            // using a class field grid to be able to set the currently selected image from selectionchanged eventhandler
            imageGrid = new Grid();
            addProductGrid.Children.Add(imageGrid);
            Grid.SetRow(imageGrid, 0);
            Grid.SetColumn(imageGrid, 3);


            // grid containing all textboxes and textblocks to set the new products properties
            Grid productPropertiesGrid = new Grid {
                HorizontalAlignment = HorizontalAlignment.Right
            };

            for (int i = 0; i < 7; i++)
            {
                productPropertiesGrid.RowDefinitions.Add(new RowDefinition {
                    Height = GridLength.Auto
                });
            }
            productPropertiesGrid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = GridLength.Auto
            });
            productPropertiesGrid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = GridLength.Auto
            });
            addProductGrid.Children.Add(productPropertiesGrid);
            Grid.SetRow(productPropertiesGrid, 0);
            Grid.SetColumn(productPropertiesGrid, 0);

            TextBlock editProductHeader = ShopUtils.CreateTextBlock("Produktens egenskaper", 14, TextAlignment.Center);

            productPropertiesGrid.Children.Add(editProductHeader);
            Grid.SetColumnSpan(editProductHeader, 2);

            TextBlock editNameText = ShopUtils.CreateTextBlock("Namn", 10, TextAlignment.Right);

            productPropertiesGrid.Children.Add(editNameText);
            Grid.SetRow(editNameText, 1);
            Grid.SetColumn(editNameText, 0);

            nameBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(nameBox);
            nameBox.HorizontalAlignment = HorizontalAlignment.Right;
            Grid.SetRow(nameBox, 1);
            Grid.SetColumn(nameBox, 1);

            TextBlock editDescriptionText = ShopUtils.CreateTextBlock("Beskrivning", 10, TextAlignment.Right);

            productPropertiesGrid.Children.Add(editDescriptionText);
            Grid.SetRow(editDescriptionText, 2);
            Grid.SetColumn(editDescriptionText, 0);

            descriptionBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(descriptionBox);
            descriptionBox.HorizontalAlignment = HorizontalAlignment.Right;
            Grid.SetRow(descriptionBox, 2);
            Grid.SetColumn(descriptionBox, 1);

            TextBlock editPriceText = ShopUtils.CreateTextBlock("Pris", 10, TextAlignment.Right);

            productPropertiesGrid.Children.Add(editPriceText);
            Grid.SetRow(editPriceText, 3);
            Grid.SetColumn(editPriceText, 0);

            priceBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(priceBox);
            priceBox.HorizontalAlignment = HorizontalAlignment.Right;
            Grid.SetRow(priceBox, 3);
            Grid.SetColumn(priceBox, 1);

            TextBlock editCategoryText = ShopUtils.CreateTextBlock("Kategori", 10, TextAlignment.Right);

            productPropertiesGrid.Children.Add(editCategoryText);
            Grid.SetRow(editCategoryText, 4);
            Grid.SetColumn(editCategoryText, 0);

            categoryBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(categoryBox);
            categoryBox.HorizontalAlignment = HorizontalAlignment.Right;
            Grid.SetRow(categoryBox, 4);
            Grid.SetColumn(categoryBox, 1);

            TextBlock editPathText = ShopUtils.CreateTextBlock("Bild", 10, TextAlignment.Right);

            productPropertiesGrid.Children.Add(editPathText);
            Grid.SetRow(editPathText, 5);
            Grid.SetColumn(editPathText, 0);

            pathBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(pathBox);
            pathBox.HorizontalAlignment = HorizontalAlignment.Right;
            Grid.SetRow(pathBox, 5);
            Grid.SetColumn(pathBox, 1);

            Button addProductButton = ShopUtils.CreateButton("Lägg till produkt");

            addProductButton.MaxWidth = 120;
            productPropertiesGrid.Children.Add(addProductButton);
            Grid.SetRow(addProductButton, 6);
            Grid.SetColumnSpan(addProductButton, 2);
            addProductButton.Click += AddProductClick;
        }
        private void CreateEditProductGrid(object sender, RoutedEventArgs e)
        {
            buttonClickGrid.Children.Clear();

            // the main grid for editing products
            Grid editProductGrid = new Grid();

            editProductGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            editProductGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            editProductGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            editProductGrid.ColumnDefinitions.Add(new ColumnDefinition());
            editProductGrid.ColumnDefinitions.Add(new ColumnDefinition());
            buttonClickGrid.Children.Add(editProductGrid);

            TextBlock changeProductsHeader = ShopUtils.CreateTextBlock("Ändra produkt", 16, TextAlignment.Center);

            editProductGrid.Children.Add(changeProductsHeader);
            Grid.SetRow(changeProductsHeader, 0);
            Grid.SetColumnSpan(changeProductsHeader, 2);

            editProductListBox = new ListBox
            {
                Margin              = new Thickness(5),
                VerticalAlignment   = VerticalAlignment.Top,
                HorizontalAlignment = HorizontalAlignment.Stretch,
                MaxHeight           = 425,
                MaxWidth            = 300,
                MinHeight           = 300,
                Background          = listBoxBrush,
                Foreground          = Brushes.White,
                BorderThickness     = new Thickness(0),
                FontWeight          = FontWeights.SemiBold
            };
            editProductGrid.Children.Add(editProductListBox);
            Grid.SetRow(editProductListBox, 1);
            Grid.SetColumn(editProductListBox, 0);
            UpdateProductListBox();
            editProductListBox.SelectionChanged += AddSelectedProductToTextBox;

            Button removeProductButton = ShopUtils.CreateButton("Ta bort vald produkt");

            removeProductButton.MaxWidth = 120;
            editProductGrid.Children.Add(removeProductButton);
            Grid.SetRow(removeProductButton, 2);
            Grid.SetColumn(removeProductButton, 0);
            removeProductButton.Click += RemoveProductClick;

            // using a nested grid to keep the columns leveled and since the other columns doesn't need 7 rows
            Grid productPropertiesGrid = new Grid();

            for (int i = 0; i < 7; i++)
            {
                productPropertiesGrid.RowDefinitions.Add(new RowDefinition {
                    Height = GridLength.Auto
                });
            }
            productPropertiesGrid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = GridLength.Auto
            });
            productPropertiesGrid.ColumnDefinitions.Add(new ColumnDefinition());
            editProductGrid.Children.Add(productPropertiesGrid);
            Grid.SetRow(productPropertiesGrid, 1);
            Grid.SetColumn(productPropertiesGrid, 1);

            // add children productPropertiesGrid
            TextBlock editProductHeader = ShopUtils.CreateTextBlock("Produktens egenskaper", 14, TextAlignment.Center);

            productPropertiesGrid.Children.Add(editProductHeader);

            TextBlock editNameText = ShopUtils.CreateTextBlock("Namn", 10, TextAlignment.Left);

            productPropertiesGrid.Children.Add(editNameText);
            Grid.SetRow(editNameText, 1);
            Grid.SetColumn(editNameText, 0);

            nameBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(nameBox);
            nameBox.HorizontalAlignment = HorizontalAlignment.Left;
            Grid.SetRow(nameBox, 1);
            Grid.SetColumn(nameBox, 1);

            TextBlock editDescriptionText = ShopUtils.CreateTextBlock("Beskrivning", 10, TextAlignment.Left);

            productPropertiesGrid.Children.Add(editDescriptionText);
            Grid.SetRow(editDescriptionText, 2);
            Grid.SetColumn(editDescriptionText, 0);

            descriptionBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(descriptionBox);
            descriptionBox.HorizontalAlignment = HorizontalAlignment.Left;
            Grid.SetRow(descriptionBox, 2);
            Grid.SetColumn(descriptionBox, 1);

            TextBlock editPriceText = ShopUtils.CreateTextBlock("Pris", 10, TextAlignment.Left);

            productPropertiesGrid.Children.Add(editPriceText);
            Grid.SetRow(editPriceText, 3);
            Grid.SetColumn(editPriceText, 0);

            priceBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(priceBox);
            priceBox.HorizontalAlignment = HorizontalAlignment.Left;
            Grid.SetRow(priceBox, 3);
            Grid.SetColumn(priceBox, 1);

            TextBlock editCategoryText = ShopUtils.CreateTextBlock("Kategori", 10, TextAlignment.Left);

            productPropertiesGrid.Children.Add(editCategoryText);
            Grid.SetRow(editCategoryText, 4);
            Grid.SetColumn(editCategoryText, 0);

            categoryBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(categoryBox);
            categoryBox.HorizontalAlignment = HorizontalAlignment.Left;
            Grid.SetRow(categoryBox, 4);
            Grid.SetColumn(categoryBox, 1);

            TextBlock editPathText = ShopUtils.CreateTextBlock("Bild", 10, TextAlignment.Left);

            productPropertiesGrid.Children.Add(editPathText);
            Grid.SetRow(editPathText, 5);
            Grid.SetColumn(editPathText, 0);

            pathBox = ShopUtils.CreateTextBox(textBoxBrush);
            productPropertiesGrid.Children.Add(pathBox);
            pathBox.HorizontalAlignment = HorizontalAlignment.Left;
            Grid.SetRow(pathBox, 5);
            Grid.SetColumn(pathBox, 1);

            Button saveProductChanges = ShopUtils.CreateButton("Spara ändringar");

            productPropertiesGrid.Children.Add(saveProductChanges);
            Grid.SetRow(saveProductChanges, 6);
            saveProductChanges.Click += SaveProductChangesClick;
        }
        private void CreateEditCouponsGrid(object sender, RoutedEventArgs e)
        {
            // always clear the buttonClickGrid to avoid stacking grids on top of each other
            buttonClickGrid.Children.Clear();

            //Main grid for the coupon grid
            Grid editCouponGrid = new Grid();

            editCouponGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            editCouponGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            editCouponGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            editCouponGrid.ColumnDefinitions.Add(new ColumnDefinition());
            editCouponGrid.ColumnDefinitions.Add(new ColumnDefinition());
            buttonClickGrid.Children.Add(editCouponGrid);

            TextBlock changeCouponHeader = ShopUtils.CreateTextBlock("Ändra kuponger", 16, TextAlignment.Center);

            editCouponGrid.Children.Add(changeCouponHeader);
            Grid.SetRow(changeCouponHeader, 0);
            Grid.SetColumnSpan(changeCouponHeader, 2);

            Button removeCouponButton = ShopUtils.CreateButton("Ta bort vald kupong");

            removeCouponButton.MaxWidth = 120;
            editCouponGrid.Children.Add(removeCouponButton);
            Grid.SetRow(removeCouponButton, 2);
            Grid.SetColumn(removeCouponButton, 0);
            removeCouponButton.Click += RemoveCouponClick;

            // listbox to display all editable coupons
            editCouponListBox = new ListBox
            {
                Margin              = new Thickness(5),
                VerticalAlignment   = VerticalAlignment.Stretch,
                HorizontalAlignment = HorizontalAlignment.Stretch,
                MaxHeight           = 300,
                MaxWidth            = 300,
                MinHeight           = 150,
                Background          = listBoxBrush,
                Foreground          = Brushes.White,
                BorderThickness     = new Thickness(0),
                FontWeight          = FontWeights.SemiBold
            };
            editCouponGrid.Children.Add(editCouponListBox);
            Grid.SetRow(editCouponListBox, 1);
            Grid.SetColumn(editCouponListBox, 0);
            // fills the listbox with items from couponList
            UpdateCouponListBox();
            editCouponListBox.SelectionChanged += AddSelectedCouponToTextBox;

            // using a nested grid to set coupon properties in order for the textboxes and listbox to stay leveled at the same height
            Grid couponPropertiesGrid = new Grid();

            couponPropertiesGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            couponPropertiesGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            couponPropertiesGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            couponPropertiesGrid.RowDefinitions.Add(new RowDefinition {
                Height = GridLength.Auto
            });
            couponPropertiesGrid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = GridLength.Auto
            });
            couponPropertiesGrid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = GridLength.Auto
            });
            editCouponGrid.Children.Add(couponPropertiesGrid);
            Grid.SetRow(couponPropertiesGrid, 1);
            Grid.SetColumn(couponPropertiesGrid, 1);

            // add children to the couponPropertiesGrid
            TextBlock editCouponHeader = ShopUtils.CreateTextBlock("Kupongens egenskaper", 14, TextAlignment.Center);

            couponPropertiesGrid.Children.Add(editCouponHeader);
            Grid.SetColumnSpan(editCouponHeader, 2);

            TextBlock editCodeText = ShopUtils.CreateTextBlock("Kod", 10, TextAlignment.Left);

            couponPropertiesGrid.Children.Add(editCodeText);
            Grid.SetRow(editCodeText, 1);
            Grid.SetColumn(editCodeText, 0);

            codeBox = ShopUtils.CreateTextBox(textBoxBrush);
            couponPropertiesGrid.Children.Add(codeBox);
            codeBox.HorizontalAlignment = HorizontalAlignment.Left;
            Grid.SetRow(codeBox, 1);
            Grid.SetColumn(codeBox, 1);

            TextBlock editDiscountText = ShopUtils.CreateTextBlock("Rabatt", 10, TextAlignment.Left);

            couponPropertiesGrid.Children.Add(editDiscountText);
            Grid.SetRow(editDiscountText, 2);
            Grid.SetColumn(editDiscountText, 0);

            discountBox = ShopUtils.CreateTextBox(textBoxBrush);
            couponPropertiesGrid.Children.Add(discountBox);
            discountBox.HorizontalAlignment = HorizontalAlignment.Left;
            Grid.SetRow(discountBox, 2);
            Grid.SetColumn(discountBox, 2);

            Button addNewCoupon = ShopUtils.CreateButton("Lägg till ny kupong");

            addNewCoupon.Padding = new Thickness(5, 2, 5, 2);
            couponPropertiesGrid.Children.Add(addNewCoupon);
            Grid.SetRow(addNewCoupon, 3);
            addNewCoupon.Click += AddNewCouponClick;

            Button saveCouponChanges = ShopUtils.CreateButton("Spara ändringar");

            saveCouponChanges.Padding = new Thickness(5, 2, 5, 2);
            couponPropertiesGrid.Children.Add(saveCouponChanges);
            Grid.SetRow(saveCouponChanges, 3);
            Grid.SetColumn(saveCouponChanges, 1);
            saveCouponChanges.Click += SaveCouponChangesClick;
        }