列データを WPF の中央に揃えるにはどうすればよいDataGrid
ですか?
13 に答える
DataGridTextColumn を使用している場合は、次のコード スニペットを使用できます。
<Style TargetType="DataGridCell">
<Style.Setters>
<Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style.Setters>
</Style>
詳細を知らずに言うのは難しいです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>
私はhuttelihutのソリューションから始めました。残念ながら、それはまだ私にはうまくいきませんでした。私は彼の答えを微調整して、これを思いつきました(解決策は、テキストを右に揃えることです):
<Resources>
<Style x:Key="RightAligned" TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
</Resources>
ご覧のとおり、スタイルを DataGridCell ではなく TextBlock に適用しました。
次に、 Cellスタイルではなく、Elementスタイルを設定する必要がありました。
ElementStyle="{StaticResource RightAligned}"
ケント・ブーガートの場合は+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>
これは @MohammedAFadil の XAML の回答で、C# のコード ビハインドに変換されています。
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 ではなく。
わかりました、frameworkElement アプローチを使用しましたが、行を強調表示しようとすると奇妙な動作がありました。
このスレッドに WPF Datagrid 配置の別の例を掲載しました。
私のお気に入りの解決策は次のとおりです。
<DataGridTextColumn Header="My Column" Binding="{Binding MyDBValue}" Width="100" >
<DataGridTextColumn.CellStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.CellStyle>
私にとって、これはうまく機能します
<DataGridTextColumn Width="1*" Binding="{Binding Balance, StringFormat=C} "Header="Balance">
<DataGridTextColumn.CellStyle>
<Style>
<Setter Property="TextBlock.TextAlignment" Value="Right"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
ブルーノの TextBlock.TextAlignment アプローチがとても気に入っています。これを水平方向の配置と組み合わせて使用すると、背景がグリッド セル全体に広がります。
例 (VB)
Dim sty = New System.Windows.Style(GetType(DataGridCell))
sty.Setters.Add(New Setter(HorizontalAlignmentProperty, HorizontalAlignment.Stretch))
sty.Setters.Add(New Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right))
sty.Setters.Add(New Setter(BackgroundProperty, Brushes.LightGray))