web-dev-qa-db-ja.com

DataGridTextColumnでTextBlockのスタイルを作成します

VerticalAlignment内またはCenter内のすべてのTextBlockコントロールに対してDataGridDataGridTextColumnに設定するグローバルスタイルを作成したいと思います。

以下をすべてのDataGridTextColumnにコピーしたくないのは、繰り返しを感じるからです。

<DataGridTextColumn Header="Some Property" Binding="{Binding SomeProperty}">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="VerticalAlignment" Value="Center"></Setter>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

次のようなことを試しましたが、DataGridTextColumnFrameworkElementまたはFrameworkContentElementを継承していないため、機能しません。 DataGrid自体は機能しますが、さらに折り返すとエラーが発生します。

<Style TargetType="DataGridTextColumn">
    <Setter Property="ElementStyle">
        <Setter.Value>
            <Style TargetType="TextBlock">
                <Setter Property="VerticalAlignment" Value="Center"/>
            </Style>
        </Setter.Value>
    </Setter>
</Style>
12
timmkrause

CellStyleは次のように定義できます。

<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>

そしてそれをDataGridに割り当てます:CellStyle="{StaticResource DataGridCellStyle}"。このようにして、すべてのセルのコンテンツが中央に配置されます。

[〜#〜] edit [〜#〜]:上記のコードは私のプロジェクトの1つからのものであり、DataGridのグリッド線を削除するコードも含まれています。テンプレートでGridBorderに変更すると、元に戻すことができます。このような:

<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>
11
Gildor

静的リソースとしてスタイルを作成する

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

次に、それをDataGridTextColumnのElementStyleに割り当てることができます

<DataGridTextColumn ElementStyle="{StaticResource verticalCenter}" />
18

DataGridTemplateColumnを使用するだけです:

<DataGridTemplateColumn Width="SizeToCells">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock HorizontalAlignment="Center" Width="100" Height="20"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
1
Dwsgg