VerticalAlignment
内またはCenter
内のすべてのTextBlock
コントロールに対してDataGrid
をDataGridTextColumn
に設定するグローバルスタイルを作成したいと思います。
以下をすべてのDataGridTextColumn
にコピーしたくないのは、繰り返しを感じるからです。
<DataGridTextColumn Header="Some Property" Binding="{Binding SomeProperty}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
次のようなことを試しましたが、DataGridTextColumn
がFrameworkElement
またはFrameworkContentElement
を継承していないため、機能しません。 DataGrid
自体は機能しますが、さらに折り返すとエラーが発生します。
<Style TargetType="DataGridTextColumn">
<Setter Property="ElementStyle">
<Setter.Value>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
</Setter.Value>
</Setter>
</Style>
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のグリッド線を削除するコードも含まれています。テンプレートでGrid
をBorder
に変更すると、元に戻すことができます。このような:
<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>
静的リソースとしてスタイルを作成する
<UserControl.Resources>
<Style x:Key="verticalCenter" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</UserControl.Resources>
次に、それをDataGridTextColumnのElementStyleに割り当てることができます
<DataGridTextColumn ElementStyle="{StaticResource verticalCenter}" />
DataGridTemplateColumn
を使用するだけです:
<DataGridTemplateColumn Width="SizeToCells">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Center" Width="100" Height="20"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>