Подтвердить что ты не робот

Как центрировать содержимое ячеек в сетке данных?

Я устанавливаю минимальную высоту datagrid таким образом:

<DataGrid MinRowHeight="40">

После подачи данных datagrid с данными, текст в каждой ячейке выравнивается сверху и слева. Я не мог найти простой способ сосредоточить этот текст.

Любые предложения для этого?

4b9b3361

Ответ 1

Окончательное решение:

<Style x:Key="DataGridContentCellCentering" TargetType="{x:Type DataGridCell}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Ответ 2

Следующий код будет центрировать содержимое ячеек в DataGrid:

<Style TargetType="DataGridCell">
    <Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style>

Ответ 3

вы можете использовать стили. Я добавляю образец для DataGridCheckBoxColumn, я надеюсь, что он поместит вас в правильном направлении.

<DataGridCheckBoxColumn Header="is active" IsReadOnly="False">
      <DataGridCheckBoxColumn.ElementStyle>
            <Style TargetType="CheckBox">
                 <Setter Property="VerticalAlignment" Value="Center"/>
                  <Setter Property="HorizontalAlignment" Value="Center"/>
             </Style>
      </DataGridCheckBoxColumn.ElementStyle>
      <DataGridCheckBoxColumn.Binding>
             <Binding Path="ISACTIVE" ValidatesOnDataErrors="True" Converter="{StaticResource MyBoolToIsActiveConverter}" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"
                                 NotifyOnValidationError="True" ValidatesOnExceptions="True">
                        </Binding>
                    </DataGridCheckBoxColumn.Binding>
                </DataGridCheckBoxColumn>

Ответ 4

Попробуйте установить Vertical и HorizontalContentAlignment DataGrid в центр

<DataGrid VerticalContentAlignment="Center" HorizontalContentAlignment="Center" />

Если это не сработает, вы можете использовать это решение в этом ответе. Он использует стиль, который выравнивает содержимое ячейки DataGrid

Ответ 5

использовать ElementStyle

 <DataGridTextColumn ElementStyle="{StaticResource Centering}"/>

  <Style x:Key="Centering" TargetType="{x:Type TextBlock}">
       <Setter Property="HorizontalAlignment" Value="Center" />
  </Style>

Ответ 6

Измените свой тег стиля, как это.....

 <Style x:Key="CellTextCentre" TargetType="DataGridCell">
    <Setter Property="TextBlock.TextAlignment" Value="Center"></Setter>
    <Setter Property="TextBlock.VerticalAlignment" Value="Center"></Setter> 
 </Style>

Ответ 7

Поскольку некоторые люди просили объяснить код Франсуа, я решил дать объяснение (к сожалению, у меня недостаточно репутации, чтобы комментировать его ответ).

Его решение предлагает установить стиль для всех ячеек в сетке данных. Он устанавливает свойство шаблона каждой ячейки в шаблон элемента управления. Чтобы поддерживать подобную функциональность, он помещает сетку с фоном, который связан с существующим фоном для ячейки в шаблон. Затем он помещает ContentPresenter внутри этой сетки, для которой вертикальное выравнивание установлено по центру (таким образом, вы также можете центрировать контент по горизонтали). Из-за способа отображения ячеек DataGrid DataGrid ищет предъявителя контента в шаблоне ячейки, который он может использовать для размещения содержимого ячейки. Он будет использовать предоставленный ContentPresenter вместо того, чтобы использовать значение со значениями по умолчанию, которое выполнит запрошенное форматирование.

Резюмируя: DataGrid будет использовать ContentPresenter, предоставленный в свойстве Template, вместо создания ContentPresenter со значениями по умолчанию. Это эффективно устанавливает свойства выравнивания запрошенным способом.

Кстати, стиль, который он предлагает создать, может быть помещен в коллекцию ресурсов любого элемента управления в иерархии xaml на уровне сетки данных или выше, и ячейки в сетке данных будут применять его (если, конечно, вы не переопределите какую-либо его часть для определенного клетка).

Надеюсь, это поможет!