Как выделить линии границы элемента управления Grid - PullRequest
5 голосов
/ 03 февраля 2012

Я написал некоторый код для добавления 100 х 100 ячеек в сетку. Дело в том, что я хотел бы выделить линии, разделяющие строки / столбцы сетки.

Какие свойства я должен использовать или как это сделать?

Ниже приведен код для создания ячеек сетки:

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 Ответ

5 голосов
/ 04 февраля 2012

Есть несколько способов попробовать.Если вы посмотрите на Grid.cs , посмотрите Brushes.Blue & Brushes.Yellow сплошные цвета, которые образуют штрихи, которые вы видите при включении ShowGridLines= "Правда" в источнике ниже?Вы можете установить для них другой цвет (сделать их одинаковыми, чтобы их не нужно было редактировать так же, как 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 & BorderThickness и разместите инкрементные границы между ячейками и столбцами, как в этом примере;

<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 для 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}" >

Надеюсь, это поможет и удачи!1018 *

...