图像出现而未被调用

时间:2013-05-29 17:41:35

标签: c# wpf image grid

我正在制作一个鼹鼠游戏,我无法使用MVVM,而且我正在制作一个随机时间的随机鼹鼠图像但是当我开始游戏时,出现一个或有时两个摩尔,这不是那个代码(我有它,所以当你点击一个痣,它会消失,这些不需要的痣如果被点击则不会消失)。谢谢您的帮助!我已经添加了所有网格填充代码,这可能是问题所在。

enter image description here

代码:

    private void PopulateGrid()
            {
                MoleChanges = TUtils.GetIniInt(Moleini, "MoleChangeTimes", "AmountofChanges", 50);
                ImageSize = TUtils.GetIniInt(Moleini, "ImageSize", "imageSize", 10);
                NumofImages = TUtils.GetIniInt(Moleini, "NumPictures", "pictures", 8);
                int ImageBorderSize = TUtils.GetIniInt(Moleini, "ImageBorder", "imageBorder", 2);
                NumberOfColumns = TUtils.GetIniInt(Moleini, "NumRowsColumns", "columnNum", 4);
                ImageHeight = ImageSize * 0.7;

                // More Columns than Rows \\
                if (NumberOfColumns > NumofImages)
                {
                    MessageBox.Show("There is something wrong with the .ini file.");
                    MainWin.Close();
                }

                // Math - Get Necessary Variables \\
                int ColumnSize = (ImageSize + (2 * ImageBorderSize));
                int RowSize = (ImageSize + (2 * ImageBorderSize));
                NumberofRows = (int)Math.Ceiling(NumofImages / NumberOfColumns);
                int MainWindowWidth = (TUtils.ToInt(NumberOfColumns.ToString(), 2) * ColumnSize) + 15;
                int MainWindowHeight = (NumberofRows * RowSize) + 200;

                // Set Window Size \\
                MainWin.Width = MainWindowWidth;
                MainWin.Height = MainWindowHeight;

                // Create Grid \\
                Content_Grid.Children.Add(grid_Main);
                grid_Main.Height = MainWindowHeight;
                grid_Main.Width = MainWindowWidth;
                grid_Main.Background = Brushes.Transparent;

                // Grid Properties \\
                for (int i = 0; i < NumberOfColumns; i++)
                {
                    ColumnDefinition newColumn = new ColumnDefinition();
                    newColumn.Width = new GridLength(ColumnSize, GridUnitType.Pixel);
                    grid_Main.ColumnDefinitions.Add(newColumn);
                }

                for (int i = 0; i < NumberofRows; i++)
                {
                    RowDefinition Row = new RowDefinition();
                    Row.Height = new GridLength(RowSize, GridUnitType.Pixel);
                    grid_Main.RowDefinitions.Add(Row);
                }

                // Fill Grid \\
                int RowCount = 0;
                int ColumnCount = 0;
                for (int i = 0; i <= NumofImages; i++)
                {
                    Image newImage = HoleImage();
                    if (RowCount < NumberofRows)
                    {
                        if (ColumnCount < NumberOfColumns)
                        {
                            Console.WriteLine("ColumnCount: " + ColumnCount.ToString());
                            Grid.SetRow(newImage, RowCount);
                            Grid.SetColumn(newImage, ColumnCount);
                            grid_Main.Children.Add(newImage);
                            ColumnCount++;
                        }

                        else
                        {
                            RowCount++;
                            ColumnCount = 0;
                            Grid.SetRow(newImage, RowCount);
                            Grid.SetColumn(newImage, ColumnCount);
                            grid_Main.Children.Add(newImage);
                            ColumnCount++;
                            Console.WriteLine("RowCount: " + RowCount.ToString());
                        }
                    }

                    else
                    {
                        break;
                    }

                    ChangeImage();
                }


            }

    // Create Image for "Hut" \\
            private Image HoleImage()
            {
                // Initialize Image \\
                Image newImage = new Image();

                // Image Properties \\
                newImage.Width = ImageSize;
                newImage.Height = ImageHeight;

                // Define Name and Content \\
                newImage.Name = "Image";
                String ImageFunction = TUtils.GetIniString(Moleini, "ImagePath", "Hole", Root + "hole.jpg");
                if (File.Exists(ImageFunction))
                {
                    newImage.Source = new BitmapImage(new Uri(ImageFunction));
                }
                else
                {
                    MessageBox.Show("Cannot find " + ImageFunction + ".", "Please fix the ini file");
                }

                return newImage;
            }

// Change Image from "Hut" to Mole \\
        private void ChangeImage()
        {
                Image newImage = HoleImage();
                molePopup = MoleImage();
                int numCol = Convert.ToInt32(NumberOfColumns);
                //Random Number - Col
                Random randomColumns = new Random();
                int ranCol = randomColumns.Next(1, numCol);
                //Random Number - Row
                Random randomRow = new Random();
                int ranRow = randomRow.Next(1, NumberofRows);
                string Moleimage = TUtils.GetIniFileString(Moleini, "ImagePath", "PictureFile", Root + "mole2.png");
                //Populate Grid with Mole at Random Times \\
                Grid.SetRow(molePopup, ranRow);
                Grid.SetColumn(molePopup, ranCol);
                grid_Main.Children.Add(molePopup);

                molePopup.MouseUp += new MouseButtonEventHandler((o, e) =>
                {
                    MolePoints++;
                    grid_Main.Children.Remove(molePopup);
                });
        }

1 个答案:

答案 0 :(得分:1)

快速阅读我的直觉反应后,你的ChangeImage()方法在每次通过网格时被调用,导致&#34;随机&#34;细胞是&#34;鼹鼠&#34; d&#34;。

至于点击不工作,我没有手持VS,所以不能100%,但是当你将molePopup传递给grid_Mail.Children.Add时,它可以作为一个值传递参数意味着当对象被复制&#34;时,您的MouseUp处理程序实际上并不存在。到了网格。