C# 如何使用border()仅显示网格的行边框(而不是列)

C# 如何使用border()仅显示网格的行边框(而不是列),c#,.net,silverlight,border,silverlight-5.0,C#,.net,Silverlight,Border,Silverlight 5.0,我正在silverlight应用程序中使用c# 我有一个1行3列的网格。 有两件事我不知道怎么做: (1)我必须只显示行的边界(不是列,只有行)。如何做到这一点? 目前我有一个类似这样的网格: //The p in function call below is yhe object obtained on deserialixing xml. private static Grid GenerateGrid(Parameters p) {

我正在silverlight应用程序中使用c#

我有一个1行3列的网格。 有两件事我不知道怎么做:

(1)我必须只显示行的边界(不是列,只有行)。如何做到这一点?

目前我有一个类似这样的网格:

//The p in function call below is yhe object obtained on deserialixing xml.
     private  static Grid GenerateGrid(Parameters p) 
            {
                Grid myGrid = new Grid();
                myGrid.Width = 650;       
                myGrid.HorizontalAlignment = HorizontalAlignment.Left;
                myGrid.VerticalAlignment = VerticalAlignment.Top;
                myGrid.ShowGridLines = false;

                ColumnDefinition colDef1 = new ColumnDefinition();
                ColumnDefinition colDef2 = new ColumnDefinition();
                ColumnDefinition colDef3 = new ColumnDefinition();
                myGrid.ColumnDefinitions.Add(colDef1);
                myGrid.ColumnDefinitions.Add(colDef2);
                myGrid.ColumnDefinitions.Add(colDef3);

                int totalRows = p.Parameter.Count() + p.Separator.Count();

                for (int i = 0; i < totalRows; i++)
                {
                    myGrid.RowDefinitions.Add(new RowDefinition());
                }               
                return (myGrid);
            } 
我的尝试是:(我使用Border来实现这一点,请参见函数末尾)

但得到的输出是这样的:(它只覆盖第一个单元格的边框,而不是该行中的其他两个单元格,而我只希望一行上有一个边框(不是该行中的列,只是行边框)) 有人能帮我完成这一步吗是否可以实现我想要尝试的操作?


注意:请注意,代码必须仅使用c#实现,而不是xaml。

我创建了一个包含1列和1行的网格(而不是3*3单元格,它必须是1*3(行*列))。然后在每行中创建边框,然后再次创建包含1行和3列的网格,然后创建这个小网格的边框

代码是:

            Border rect = new Border();
            rect.Width = g.Width;
            rect.Height = g.Height;
            rect.BorderThickness = new Thickness(2);
            rect.BorderBrush = new SolidColorBrush(Colors.Black);        

            Grid childGrid = new Grid();
            ColumnDefinition colDef1 = new ColumnDefinition();
            ColumnDefinition colDef2 = new ColumnDefinition();
            ColumnDefinition colDef3 = new ColumnDefinition();
            childGrid.ColumnDefinitions.Add(colDef1);
            childGrid.ColumnDefinitions.Add(colDef2);
            childGrid.ColumnDefinitions.Add(colDef3);
            TextBlock txtblk3 = new TextBlock();
            var border = new Border()
            {
                Background = new SolidColorBrush(Colors.LightGray)
            };
            border.Height = 14;

            var border1 = new Border()
            {
                Background = new SolidColorBrush(Colors.White)
            };
            border1.Height = 14;

            Grid.SetColumnSpan(border, 3);
            Grid.SetRow(childGrid, LoopCount);
            childGrid.Children.Add(border);

            txtblk3.FontSize = 14;
            txtblk3.FontWeight = FontWeights.Bold;

            txtblk3.Text = param.Separator[SeparatorPosition];
            Grid.SetColumn(border1, 1);
            Grid.SetRow(border1,LoopCount);
            border1.Child = txtblk3;    

            childGrid.Children.Add(border1);
            g.Children.Add(childGrid);
            return (g);

其中“g”只有一列和“LoopCount”行数。它对我很有效。

您应该覆盖
DataGridView
控件的
CellPaint
事件,如下代码片段所示:

private void grid_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    e.AdvancedBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None;
    e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;
}

@扎哈玛玛只去过一次边境。(我也想这么做,但我不知道怎么做,如果你对两者都有想法的话,我非常感谢你)。但首要的问题是如何在行上加上边框。@TzahMama为什么要删除该帖子?它起作用了。我得在上面打勾。
            Border rect = new Border();
            rect.Width = g.Width;
            rect.Height = g.Height;
            rect.BorderThickness = new Thickness(2);
            rect.BorderBrush = new SolidColorBrush(Colors.Black);        

            Grid childGrid = new Grid();
            ColumnDefinition colDef1 = new ColumnDefinition();
            ColumnDefinition colDef2 = new ColumnDefinition();
            ColumnDefinition colDef3 = new ColumnDefinition();
            childGrid.ColumnDefinitions.Add(colDef1);
            childGrid.ColumnDefinitions.Add(colDef2);
            childGrid.ColumnDefinitions.Add(colDef3);
            TextBlock txtblk3 = new TextBlock();
            var border = new Border()
            {
                Background = new SolidColorBrush(Colors.LightGray)
            };
            border.Height = 14;

            var border1 = new Border()
            {
                Background = new SolidColorBrush(Colors.White)
            };
            border1.Height = 14;

            Grid.SetColumnSpan(border, 3);
            Grid.SetRow(childGrid, LoopCount);
            childGrid.Children.Add(border);

            txtblk3.FontSize = 14;
            txtblk3.FontWeight = FontWeights.Bold;

            txtblk3.Text = param.Separator[SeparatorPosition];
            Grid.SetColumn(border1, 1);
            Grid.SetRow(border1,LoopCount);
            border1.Child = txtblk3;    

            childGrid.Children.Add(border1);
            g.Children.Add(childGrid);
            return (g);
private void grid_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    e.AdvancedBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None;
    e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;
}