Create style for TextBlock in DataGridTextColumn

前端 未结 3 544
执笔经年
执笔经年 2020-12-10 04:00

I want to create a global style that sets the VerticalAlignment to Center for all TextBlock controls inside a DataGrid or

相关标签:
3条回答
  • 2020-12-10 04:39

    You can define a CellStyle as below:

    <Style x:Key="DataGridCellStyle" TargetType="DataGridCell">
        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridCell}">
                    <Grid Background="{TemplateBinding Background}">
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    And assign it to the DataGrid: CellStyle="{StaticResource DataGridCellStyle}". In this way all your cells will have content centered.

    EDIT: The above code is from one of my projects and also contains the code to remove grid lines in the DataGrid. You can get them back by changing Grid to Border in the template. Like this:

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    
    0 讨论(0)
  • 2020-12-10 04:47

    Create a style as a static resource

    <UserControl.Resources>
        <Style x:Key="verticalCenter" TargetType="{x:Type TextBlock}">
            <Setter Property="VerticalAlignment" Value="Center" />
        </Style>
    </UserControl.Resources>
    

    Then you can assign it to the ElementStyle of the DataGridTextColumn

    <DataGridTextColumn ElementStyle="{StaticResource verticalCenter}" />
    
    0 讨论(0)
  • 2020-12-10 04:51

    Just use the DataGridTemplateColumn:

    <DataGridTemplateColumn Width="SizeToCells">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock HorizontalAlignment="Center" Width="100" Height="20"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    
    0 讨论(0)
提交回复
热议问题