WPF DataGrid
の中央に列データを配置するにはどうすればよいですか?
詳細を知らずに言うのは難しいですが、ここにDataGridTextColumn
が中心にあります:
<wpf:DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True">
<wpf:DataGridTextColumn.CellStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
</wpf:DataGridTextColumn.CellStyle>
</wpf:DataGridTextColumn>
DataGridTextColumnを使用している場合、次のコードスニペットを使用できます。
<Style TargetType="DataGridCell">
<Style.Setters>
<Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style.Setters>
</Style>
私はhuttelihutのソリューションから始めました。残念ながら、それは私にはまだうまくいきませんでした。私は彼の答えを微調整し、これを思いつきました(解決策はテキストを右に揃えることです):
<Resources>
<Style x:Key="RightAligned" TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
</Resources>
ご覧のとおり、DataGridCellではなくTextBlockにスタイルを適用しました。
そして、Cellスタイルではなく、Elementスタイルを設定する必要がありました。
ElementStyle="{StaticResource RightAligned}"
Kent Boogaartの+1。最終的にこれを行うことで、コードの混乱が少し少なくなります(そして、いくつかの列で配置を使用できるようになります)。
<Resources>
<Style x:Key="NameCellStyle" TargetType="DataGridCell">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" CellStyle="{StaticResource NameCellStyle}" Binding="{Binding Name}"/>
// .. other columns
</DataGrid.Columns>
これは、C#コードビハインドに変換された@MohammedAFadilのXAMLの回答です。
var MyStyle = new Style(typeof(DataGridCell)) {
Setters = {
new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center)
}
};
Style
を適用するには、CellStyle
のDataGrid
プロパティを設定します。
var MyGrid = new DataGrid() {
CellStyle = MyStyle
};
またはコードビハインド:
grid.CellStyle = newCellStyle();
public static Style newCellStyle()
{
//And here is the C# code to achieve the above
System.Windows.Style style = new Style(typeof(DataGridCell));
style.Setters.Add(new System.Windows.Setter
{
Property = Control.HorizontalAlignmentProperty,
Value = HorizontalAlignment.Center
});
return style;
}
私は、受け入れられた答えを使用して、セルがシフトされ、ファンキーに見えることに問題がありました。遅れていることは知っていますが、私の発見が誰かの助けになることを願っています。私が使う:
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
cellStyleではなく。
私のお気に入りのソリューションは次のとおりです。
<DataGridTextColumn Header="My Column" Binding="{Binding MyDBValue}" Width="100" >
<DataGridTextColumn.CellStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.CellStyle>
OK、frameworkElementアプローチを使用しましたが、行を強調表示しようとすると奇妙な動作がありました。
これにWPF Datagridの配置の別の例を入れました thread !
私にとってこれはうまく機能します
<DataGridTextColumn Width="1*" Binding="{Binding Balance, StringFormat=C} "Header="Balance">
<DataGridTextColumn.CellStyle>
<Style>
<Setter Property="TextBlock.TextAlignment" Value="Right"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
C#コードに変換された@MohammedAFadilのXAML回答を変換してくれたDanny Beckettに感謝します。データグリッドはすべて動的に設定されるため、いつでも何でも変更できます。
何も入っていない空のデータグリッドを設定し、それをデータにバインドするには、datagrid.columnsを取得します
var centerTextSetter = new Style(typeof(DataGridCell))
{
Setters = { new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center) }
};
DgDbNames.Columns.Add(new DataGridTextColumn()
{
Header = "Db Name",
Binding = new System.Windows.Data.Binding("DbName"),
IsReadOnly = true,
Width = new DataGridLength(0.2, DataGridLengthUnitType.Star),
CellStyle = centerTextSetter
});