1

我的 Whack a Mole 游戏遇到了问题:

XamlParseException 未处理

'对匹配指定绑定约束的'WhackaMoleReal.MainWindow'类型的构造函数的调用引发了异常。行号“3”和行位置“9”。

这是我的主要代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using System.IO;
using TeiUtils;

namespace WhackaMoleReal
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        //Global Variables\\
        string[] CmdArgs = Environment.GetCommandLineArgs();
        string Moleini;
        string Root = "";
        int ImageSize;

        public MainWindow()
        {
            //Setting .ini Prefences\\
            Root = TUtils.GetIniString(Moleini, "Root", "Path", "");
            Moleini = CmdArgs[1];
            InitializeComponent();

            // Dispacher for Full Game Time \\
            System.Windows.Threading.DispatcherTimer endGame = new System.Windows.Threading.DispatcherTimer();
            endGame.Tick += new EventHandler(endGame_Tick);
            endGame.Interval = TimeSpan.FromSeconds(5);
            endGame.Start();
        }

        private void endGame_Tick(object sender, EventArgs e)
        {
            this.Close();
        }

        private void PopulateGrid()
        {
            double NumofImages = TUtils.GetIniInt(Moleini, "NumPictures", "pictures", 8);
            int ImageSize = TUtils.GetIniInt(Moleini, "ImageSize", "imageSize", 50);
            int ImageBorderSize = TUtils.GetIniInt(Moleini, "ImageBorder", "imageBorder", 2);
            double NumberOfColumns = TUtils.GetIniInt(Moleini, "NumRowsColumns", "columnNum", 4);

            // 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 + (4 * ImageBorderSize));
            int RowSize = (ImageSize + (4 * ImageBorderSize));
            int NumberofRows = (int)Math.Ceiling(NumofImages / NumberOfColumns);
            int MainWindowWidth = (TUtils.ToInt(NumberOfColumns.ToString(), 4) * ColumnSize) + 15;
            int MainWindowHeight = (NumberofRows * RowSize) + 35;


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

            // Create Grid \\
            Grid grid_Main = new Grid();
            MainWin.Content = grid_Main;
            grid_Main.Height = MainWindowHeight;
            grid_Main.Width = MainWindowWidth;

            // 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++)
            {
                //  grid_Main.Children.Add(grid_Main);

                if (RowCount < NumberofRows)
                {
                    if (ColumnCount < NumberOfColumns)
                    {
                        Console.WriteLine("ColumnCount: " + ColumnCount.ToString());
                        Grid.SetRow(CreateImage(), ColumnCount);
                        Grid.SetColumn(CreateImage(), ColumnCount);
                        ColumnCount++;
                    }

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

                else
                {
                    break;
                }

            }
        }

        private Image CreateImage()
        {
            // Gets/Sets Necessary Variables \\
            double ImageHeight = ImageSize * 0.7;

            // Initialize Image \\
            System.Windows.Controls.Image newImage = new Image();

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

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

            return newImage;
        }
            




    }

}

和我的 XAML:

<Window x:Name="MainWin" x:Class="WhackaMoleReal.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Image Margin="353,156,-131,-58" Source="mole2.png" Stretch="Fill"/>
        <TextBlock HorizontalAlignment="Left" Margin="20,10,0,0" TextWrapping="Wrap" Text="Can You Catch the Mole?" VerticalAlignment="Top" Height="79" Width="497" FontFamily="SimHei" FontSize="40"/>

    </Grid>
</Window>
4

2 回答 2

0

我发现了我的问题,我只需要删除并放回抓取 .dll 的 .ini 值 :)

于 2013-05-27T18:29:14.140 回答
0

Environment.GetCommandLineArgs()应该至少返回一个包含 2 个对象的数组,因为您在构造函数中引用了它

Moleini = CmdArgs[1];

我试过你的代码。Environment.GetCommandLineArgs()只返回 1 个对象。

于 2013-05-21T17:08:14.523 回答