Wpf 如何构建包含5列和10行的网格

Wpf 如何构建包含5列和10行的网格,wpf,xaml,Wpf,Xaml,我有一个5列10行的网格,每列的值应该是0-9,点击任意数字 以获取单击的单元格的值。什么是构建这个的最佳方式 有很多方法可以做到这一点,如果不了解更多的需求,很难说哪种方法最好 一种方法是将鼠标单击侦听器附加到网格,并在处理程序中计算单击了哪个单元格 Grid grid = e.Source as Grid; Point clickedPoint = e.GetPosition(Grid.RowProperty); int rowClicked = (int)Math.Floor(clicke

我有一个5列10行的网格,每列的值应该是0-9,点击任意数字 以获取单击的单元格的值。什么是构建这个的最佳方式


有很多方法可以做到这一点,如果不了解更多的需求,很难说哪种方法最好

一种方法是将鼠标单击侦听器附加到网格,并在处理程序中计算单击了哪个单元格

Grid grid = e.Source as Grid;
Point clickedPoint = e.GetPosition(Grid.RowProperty);
int rowClicked = (int)Math.Floor(clickedPoint.Y / grid.RowDefinitions.Count);
这对性能有好处,因为只有一个事件侦听器——但您必须确保放置在网格顶部的任何元素都允许单击事件冒泡(也就是说,如果它们实现了单击侦听器,则应使用
e.Handled=false


另一种方法是,如果网格单元格中有UI元素,则将单击侦听器附加到网格中的每个元素,并使用
clickedElement.GetValue(Grid.RowProperty)
获取行号


编辑您可以使用如下代码创建一个简单的5x10网格:

        const int columns=5, rows=10;
        for (int i = 0; i < columns; i++)
        {
            grid.ColumnDefinitions.Add(new ColumnDefinition());
            for (int j = 0; j < rows; j++)
            {
                if (i==0) grid.RowDefinitions.Add(new RowDefinition());
                var content = new TextBlock() { Text = j.ToString() };
                Grid.SetColumn(content, i);
                Grid.SetRow(content, j);
                grid.Children.Add(content);
            }
        }
const int columns=5,rows=10;
对于(int i=0;i
有很多方法可以做到这一点,如果不了解更多的需求,很难说哪种方法最好

一种方法是将鼠标单击侦听器附加到网格,并在处理程序中计算单击了哪个单元格

Grid grid = e.Source as Grid;
Point clickedPoint = e.GetPosition(Grid.RowProperty);
int rowClicked = (int)Math.Floor(clickedPoint.Y / grid.RowDefinitions.Count);
这对性能有好处,因为只有一个事件侦听器——但您必须确保放置在网格顶部的任何元素都允许单击事件冒泡(也就是说,如果它们实现了单击侦听器,则应使用
e.Handled=false


另一种方法是,如果网格单元格中有UI元素,则将单击侦听器附加到网格中的每个元素,并使用
clickedElement.GetValue(Grid.RowProperty)
获取行号


编辑您可以使用如下代码创建一个简单的5x10网格:

        const int columns=5, rows=10;
        for (int i = 0; i < columns; i++)
        {
            grid.ColumnDefinitions.Add(new ColumnDefinition());
            for (int j = 0; j < rows; j++)
            {
                if (i==0) grid.RowDefinitions.Add(new RowDefinition());
                var content = new TextBlock() { Text = j.ToString() };
                Grid.SetColumn(content, i);
                Grid.SetRow(content, j);
                grid.Children.Add(content);
            }
        }
const int columns=5,rows=10;
对于(int i=0;i
每行代表什么?从(1,0)到(10,0)的每列中应该有0-9。每行代表什么?从(1,0)到(10,0)的每列中应该有0-9。我添加了图像网格应该是什么样子的,怎么做?@Gani抱歉,我现在看不到图像(它正在工作)。我以后必须看一看。@Kumar请查看我的更新。请注意,这个问题实在太笼统了,不适合堆栈溢出——通常情况下,问题应该是先尝试了一些东西,然后问一些具体的问题。我添加了图像网格应该是什么样子的,如何做到这一点?@Gani抱歉,我现在无法看到图像(它在工作时会阻止它)。我以后必须看一看。@Kumar请查看我的更新。请注意,这个问题实在太笼统了,不适合堆栈溢出——通常情况下,这些问题应该先尝试一些东西,然后再问一些具体的问题。