如何突出显示网格控件的边框线

时间:2012-02-03 09:41:09

标签: wpf wpf-controls

我已经写了一些代码,以便向网格添加100 x 100个单元格。问题是我想突出显示分割网格行/列的线条。

我应该使用哪些属性,或者我应该如何使用?

Bellow是创建网格单元格的代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        for (int i = 0; i < 100 ; i++)

            layoutGrid.RowDefinitions.Add( new RowDefinition {  } );
        for (int i = 0; i < 100; i++)
            layoutGrid.ColumnDefinitions.Add(new ColumnDefinition { });

    }
}

1 个答案:

答案 0 :(得分:5)

有几种方法可以尝试。如果您查看 Grid.cs ,请参阅 Brushes.Blue &amp; Brushes.Yellow 纯色,构成您在下面的源中启用ShowGridLines =“True”时看到的破折号?您可以将它们设置为不同的颜色(使它们都是相同的颜色,不必像Brushes.Gray那样编辑它,或者您可以省略破折号,绘制一条线,甚至可以使用自定义画笔资源,如渐变。

 /// <summary>
    /// Helper to render grid lines. 
    /// </summary>
    internal class GridLinesRenderer : DrawingVisual 
    { 
        /// <summary>
        /// Static initialization 
        /// </summary>
        static GridLinesRenderer()
        {
            s_oddDashPen = new Pen(Brushes.Blue, c_penWidth); 
            DoubleCollection oddDashArray = new DoubleCollection();
            oddDashArray.Add(c_dashLength); 
            oddDashArray.Add(c_dashLength); 
            s_oddDashPen.DashStyle = new DashStyle(oddDashArray, 0);
            s_oddDashPen.DashCap = PenLineCap.Flat; 
            s_oddDashPen.Freeze();

            s_evenDashPen = new Pen(Brushes.Yellow, c_penWidth);
            DoubleCollection evenDashArray = new DoubleCollection(); 
            evenDashArray.Add(c_dashLength);
            evenDashArray.Add(c_dashLength); 
            s_evenDashPen.DashStyle = new DashStyle(evenDashArray, c_dashLength); 
            s_evenDashPen.DashCap = PenLineCap.Flat;
            s_evenDashPen.Freeze(); 
        }

或者你可以在XAML中显示一个技巧(因为我已经在其他地方为过去的帖子一起打了一个例子),你可以使用设置的BorderBrush&amp; amp; BorderThickness和跨越细胞的跨越增量边界&amp;像这个例子的列;

<Border Height="300" Width="300" Background="White" BorderThickness="1" BorderBrush="Gray">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="30"/>               
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="30"/>               
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="30"/>               
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="30"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
                <RowDefinition Height="30"/>
            </Grid.RowDefinitions>
            <!-- Horizontal Accent Lines -->
            <Border Grid.ColumnSpan="10" BorderThickness="0,1" BorderBrush="Gray"/>
            <Border Grid.Row="2" Grid.ColumnSpan="10" BorderThickness="0,1" BorderBrush="Gray"/>
            <Border Grid.Row="4" Grid.ColumnSpan="10" BorderThickness="0,1" BorderBrush="Gray"/>
            <Border Grid.Row="6" Grid.ColumnSpan="10" BorderThickness="0,1" BorderBrush="Gray"/>
            <Border Grid.Row="8" Grid.ColumnSpan="10" BorderThickness="0,1" BorderBrush="Gray"/>
            <!-- Vertical Accent Lines -->
            <Border Grid.Column="1" Grid.RowSpan="10" BorderThickness="1,0" BorderBrush="Gray"/>
            <Border Grid.Column="3" Grid.RowSpan="10" BorderThickness="1,0" BorderBrush="Gray"/>
            <Border Grid.Column="5" Grid.RowSpan="10" BorderThickness="1,0" BorderBrush="Gray"/>
            <Border Grid.Column="7" Grid.RowSpan="10" BorderThickness="1,0" BorderBrush="Gray"/>
            <Border Grid.Column="9" Grid.RowSpan="10" BorderThickness="1,0" BorderBrush="Gray"/>
            <!-- Content Elements -->
            <TextBlock Text="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="2" Grid.Column="5" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="3" Grid.Row="2" Grid.Column="9" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="4" Grid.Row="4" Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Text="5" Grid.Row="8" Grid.Column="7" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
        </Border>

或者使用XAML for DataGrid;

   <Window.Resources>
       <SolidColorBrush x:Key="RedGridLine" Color="#FFFF4444" />
       <SolidColorBrush x:Key="BlueGridLine" Color="#554444FF"/>
    </Window.Resources>

    <my:DataGrid VerticalGridLinesBrush="{StaticResource RedGridLine}"
            HorizontalGridLinesBrush="{StaticResource BlueGridLine}" >

希望这有帮助,祝你好运!

相关问题