WPF: Как реализовать пользовательскую сетку с помощью CellSpacing? - PullRequest
4 голосов
/ 27 апреля 2011

Мне не хватает HTML-ячеек в WPF.Я пытаюсь реализовать нечто подобное в Grid WPF, создавая собственный переопределение Grid-класса из Grid, а затем изменив MeasureOverride и ArrangeOverride, чтобы получить поведение, которое я хочу.Что означает, что каждая ячейка в сетке должна иметь фиксированный интервал (не заполнение) друг другу.Как это можно сделать?

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011

Вы, возможно, могли бы написать свою собственную панель , или, возможно, даже потомок Grid, которая делает ваш собственный макет с межстрочным интервалом. Это было бы неплохо.

Вот что я обычно делаю вместо этого, чтобы добиться того же. Предположим, я хочу интервал в 3 пикселя. Вы можете сделать это, применяя поле в 1,5 пикселя к каждой ячейке (таким образом, общее пространство между ячейкой и ее соседом составляет 1,5 + 1,5 = 3 пикселя), а затем еще одно поле в 1,5 пикселя вокруг всей сетки, чтобы внешний край был правильным Поле 1,5 пикселя вокруг ячейки + поле 1,5 пикселя вокруг сетки = 3 пикселя). XAML выглядит так:

<Grid Margin="1.5">
    ...
    <Label Grid.Row="0" Grid.Column="0" Margin="1.5">...</Label>
    <TextBox Grid.Row="0" Grid.Column="1" Margin="1.5">...</TextBox>
    ...
</Grid>

Это некрасиво, но работает.

Если большинство элементов управления в вашей таблице имеют один и тот же тип (например, если это все метки или все метки и текстовые поля), то вы можете использовать стили вместо объявления и повторного объявления поля для каждого элемента в сетка:

<Grid Margin="1.5">
    <Grid.Resources>
        <Style TargetType="Label">
            <Setter Property="Margin" Value="1.5"/>
        </Style>
        <Style TargetType="TextBox">
            <Setter Property="Margin" Value="1.5"/>
        </Style>
    </Grid.Resources>
    ...
    <Label Grid.Row="0" Grid.Column="0">...</Label>
    <TextBox Grid.Row="0" Grid.Column="1">...</TextBox>
    ...
</Grid>

На самом деле, я обнаружил на практике, что мне часто нужны неравные поля - например, мне может понадобиться 3-пиксельное поле вокруг верха, слева и справа, но без поля снизу (потому что элементы управления ниже у него уже есть свой запас). Поэтому я обычно не использую 1,5 пикселя вокруг; Я обычно заканчиваю чем-то более сложным. Итак, я понимаю, почему они не добавили CellSpacing; это упростило бы простые случаи, но было бы бесполезным в более сложных макетах.

Но половинные поля - это быстрый способ достичь CellSpacing, и тогда вы можете настроить поля, если вам нужно что-то более необычное.

2 голосов
/ 10 июня 2012

Я нашел этот пост в блоге о создании пользовательской панели сетки, которая обрабатывает интервалы между ячейками: http://daniel -albuschat.blogspot.dk / 2011/07 / gridlayout-for-wpf-escape-margin-hell.html

0 голосов
/ 27 апреля 2011

Вы ищете свойство Margin.Вы можете стилизовать класс DataGridCell.

<Style TargetType="{x:Type toolkit:DataGridCell}">
        <Setter Property="Margin" Value="3" />
    </Style>
...