簡単な質問:WPFでdataGridCellにパディングを設定するにはどうすればよいですか? (一度に1つまたはすべてのセルで、気にしません)
DataGrid.CellStyle
プロパティにセッターを追加してDataGridCell.Padding
プロパティを使用し、同様にDataGridColumn.CellStyle
プロパティを使用しても効果はありません。
また、DataGridColumn.ElementStyle
プロパティを使用してみましたが、これ以上運はありません。
私はそこに行き詰まっている、誰かがdataGridCellにパディングを適用することができたのか?
注:いいえ、追加します。透明な境界線を使用してこれを行うことはできません。境界線プロパティを他の何かに既に使用しているからです。 backgroundプロパティを使用し、セル間に「空白」スペースが必要ないため、marginプロパティも使用できません(驚くほど十分に機能しているようです)。
問題は、Padding
がBorder
のテンプレートにあるDataGridCell
に転送されないことです。テンプレートを編集し、Padding
のTemplateBindingを追加できます
<DataGrid ...>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Padding" Value="20"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.CellStyle>
<!--...-->
</DataGrid>
Davidのアプローチを組み合わせた、よりクリーンな方法(私の意見)です。
<Resources>
<Style x:Key="ColumnElementStyle" TargetType="TextBlock">
<Setter Property="Margin" Value="5,0,10,0" />
</Style>
</Resources>
その後...
<DataGridTextColumn ElementStyle="{StaticResource ColumnElementStyle}" />
<DataGridTextColumn ElementStyle="{StaticResource ColumnElementStyle}" />
(私の場合、私の行は読み取り専用なので、EditingStyleはありません)
ほぼ5年後、この質問はまだ使用されているようだ(まだ賛成票を受け取っている)ので、要求されているので、ここでTextColumnで(ElementStyleを使用して)使用したソリューションを示します(ただし、任意のタイプのDataGridColumn):
コードビハインドですべて実行しました。
class MyTextColumn : DataGridTextColumn
{
public MyTextColumn()
{
ElementStyle = new Style(typeof(TextBlock));
EditingElementStyle = new Style(typeof(TextBox));
ElementStyle.Setters.Add(new Setter(FrameworkElement.MarginProperty, new Thickness(3)));
EditingElementStyle.Setters.Add(new Setter(Control.PaddingProperty, new Thickness(0, 1, 0, 1)));
}
}
ただし、xamlで直接行う場合:
<DataGrid.Columns>
<DataGridTextColumn>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="3"/>
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="Padding" Value="0 1 0 1"/>
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.Columns>
<DataGridTextColumn MinWidth="100" Header="Changed by" Width="" Binding="{Binding Changedby}" IsReadOnly="True" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="Transparent" />
<Setter Property="FrameworkElement.HorizontalAlignment"Value="Center"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
また、変更してみることができます
{Binding BindingValue, StringFormat={}{0:#0.0000}}
に
{Binding BindingValue, StringFormat={}{0:#0.0000 }}
興味深いことに、WPFのXAML {0:#0.0000}は、レンダリングされたコントロールの形式でこの余分なスペース文字を尊重し、グリッド列のエッジから値を移動します。