Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击函数以生成元素_C#_Wpf_Events_User Interface - Fatal编程技术网

C# 单击函数以生成元素

C# 单击函数以生成元素,c#,wpf,events,user-interface,C#,Wpf,Events,User Interface,我有一个通过代码填充的网格。这是我的实现: for (int i = 1; i <= 3; i++) { for (int j = 0; j < 3; j++) { Image oImage = new Image(); Window.myGrid.Children.Add(oImage); oImageSource.UriSource = oImageUri; oImage.So

我有一个通过代码填充的网格。这是我的实现:

for (int i = 1; i <= 3; i++)
{
     for (int j = 0; j < 3; j++)
     {
          Image oImage = new Image();
          Window.myGrid.Children.Add(oImage);

          oImageSource.UriSource = oImageUri;

          oImage.Source = oImageSource;

          Grid.SetRow(oImage, i);
          Grid.SetColumn(oImage, j);
     }
}

for(inti=1;i您可以利用lambda表达式的闭包特性来实现这一点,尽管您必须小心

在内部
for
循环中,您可以执行以下操作:

Image oImage = new Image();
Window.myGrid.Children.Add(oImage);

var row = i;
var col = j;
oImage.MouseUp += (sender, args) => func(row, col);
这会将指定的lambda表达式附加到
Image
实例的
MouseUp
事件,该实例将使用适当的值调用函数。lambda表达式将关闭这些变量,即使这些变量离开作用域,它也会记住它们的值


这里的关键是,您需要使用局部作用域变量作为参数。这样做,您将创建一个新的
副本,每个循环都将通过。更具体地说,您可以使用
func(i,j)
——lamba将“记住”
i
j
拥有的最后一个值,并且在所有9个图像上始终调用
func(3,3)

您可以将图像绑定到类似

oImage.MouseUp +=new MouseButtonEventHandler(oImage_MouseUp);
然后在处理程序中,可以使用Grid.GetColumn和Grid.GetRow来获取属性

private void oImage_MouseUp(object sender, MouseButtonEventArgs e)
    {
        Image bb = (Image)sender;
        func(Grid.GetRow(bb), Grid.GetColumn(bb));
    }