c# - 动态创建图像 - 当前上下文中不存在

标签 c# image

我正在尝试在 C# 的 WPF 中创建一个 WhackaMole 游戏。我有点菜鸟。在 for 循环中,我试图将“i”的数量添加到“图像”。我收到以下错误:

 "Error The name 'Image1' does not exist in the current context" 

'Image2' 等也是如此。我正在尝试将图像集成到 StackPanel 中。

感谢您的帮助:)

    public partial class MainWindow : Window
    {
        Image[] ImageArray = new Image[50];
        public MainWindow()
        {
            Moleini = MoleScore[1];
            InitializeComponent();
            //string ImageName = "Image";
            for (int i = 0; i <= 8; i++)
            {
                Image Image = new Image();
                ImageArray[i] = Image;
                Image.Name = "Image" + i.ToString();
            }

            ////Create Images
            //for (int i = 0; i <= 8; i++)
            //{
            //    StackPanel1.Children.Add(CreateImage(i));
            //}

            //Dispacher for Mole to Appear
            System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = TimeSpan.FromSeconds(1);
            dispatcherTimer.Start();

            //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();
        }

        ////Create Image
        //public Image CreateImage(int i)
        //{

        //}

        private void dispatcherTimer_Tick(object sender, EventArgs e)
        {

            //Random Number Generator
            Random rnd = new Random();
            int num = rnd.Next(1, 9);

            //If Random Number is "1" Then Image will display
            if (num == 1)
            {
                ImageSource MoleImage = new BitmapImage(new Uri(ImgNameMole));
                Image1.Source = MoleImage;            
            }
            //If Random Number does not equal 1
            if (num != 1)
            {
                ImageSource hole = new BitmapImage(new Uri(ImgHole));
                Image1.Source = hole;
            }

            //If Random Number is "2" Then Image will display
            if (num == 2)
            {
                ImageSource MoleImage = new BitmapImage(new Uri(ImgNameMole));
                Image2.Source = MoleImage;
            }
}

最佳答案

您是否考虑过在您的游戏中使用 MVVM 设计模式?它更适合 WPF 的技术,因为它保持数据和 UI 层分离,就像 WPF 的 XAML 和绑定(bind)系统所做的那样,并且它会使这更容易。

我记得answering关于扫雷游戏的类似问题,所以我将从那里开始。

从创建 Mole 对象开始。 Moles 有 3 个属性:RowIndexColumnIndexIsUp 属性。

现在您需要一个模板来绘制您的 Mole 对象。为 local:Mole 对象创建一个 DataTemplate,并使用您的图像绘制它。如果IsUp=TrueDataTrigger 可用于绘制痣图片,如果IsUp=False,则可用于绘制孔图像。

现在在您的代码隐藏中,创建一个 Mole 对象列表,并初始化它们的默认值。这只是意味着两个循环,通过创建 Mole 对象,并设置它们的行/列索引。

要绘制列表,请使用 XAML 中的 ItemsControl。将 ItemsControl.ItemsPanelTemplate 更改为 Grid,并绑定(bind) Grid.RowGrid.Column 属性ItemsControl.ItemContainerStyleMole 对象上的 RowIndexColumnIndex 属性。

最后,启动一个计时器,随机更改列表中随机 Mole 对象的 IsUp 属性为 IsUp=falsetrue。将其更改为 true 时,还会启动第二个计时器,该计时器将在随机时间后更改 IsUp=false

添加分数应该相当容易。向 Mole 对象添加一个 ICommand HitMoleCommand,它返回一个 RelayCommand,当 IsUp=True 时启用,并且在那里做一些逻辑(计算点数、更改 IsUp=False 和取消计时器等)。

但无论如何,Image1 不是您的 MainWindow 类的属性,这就是您无法从调度程序代码访问它的原因。只是创建一个对象并为其命名并不会将其作为属性存储在 Window 上,就像在运行项目之前创建一个对象并在 XAML 中为其命名一样。您需要将图像存储在类中的某处才能像那样访问它,例如在 ImageArray 对象中。

我看到您在我写这篇文章时已经找到了您的答案,但我还是要发布它,因为我强烈认为如果您正在使用 WPF,您至少应该这样做了解 MVVM 设计模式,即使您不选择使用它 :)

关于c# - 动态创建图像 - 当前上下文中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344818/

相关文章:

css - 替代背景大小 : cover for img tags?

ios - 当我在 xcode 中单击单元格时,如何在 rightBarButtonItem 中放置不同的图像?

c# - 流畅的验证规则

c# - 返回带有对象名称的 Json 格式的数据

c# - 有没有更快的方法来检查外部网页是否存在?

html下载属性打开新标签而不是下载文件

c# - Moq - 如何验证属性值是否通过 setter 设置

c# - 非常慢的性能结构

ruby-on-rails - 如何检查是否在网站上找到了图像?

php - 上传base64图片到amazon s3