トップ回答者
WPF DataGrid 列の中央寄せ表示で列幅がズレる

質問
-
下のコードを書いていますが、DataGridの列(ヘッダーを除く)を中央寄せで表示したいと思っています。
右寄せ、左寄せでは正常に表示されますが、中央寄せにした時のみ列幅がズレて表示されるのが納得いきません。
中央寄せで正常に表示させる方法を教えて下さい。、
列幅がズレて表示された状態の画面 中央寄せを指定しているが、右寄せになっている
https://box.c.yimg.jp/res/box-s-kxdvxo7paoypvum2halnj35oei-1001?uid=4734650e-14c4-416f-8782-79fbca0f1ab9&etag=0e8cdc3b1484634184118243
■ XAML
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid AutoGenerateColumns="True" BorderBrush="Black" BorderThickness="1" CanUserAddRows="True" CanUserDeleteRows="True" FontSize="14" Height="182" HorizontalScrollBarVisibility="Disabled" Margin="10,10,43,119" MinWidth="400" Name="DataGrid1" VerticalAlignment="Stretch" VerticalContentAlignment="Top" Width="450" />
</Grid>
</Window>
■ コード
Imports System.Data
Imports System.Windows.Controls.Primitives
Class MainWindow
Dim Dataview00 As New DataView
Private Sub MT1_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Dim sty1 As New System.Windows.Style
Dim dta1 As New DataTable
Dim workRow As DataRow
dta1.Columns.Add("Col1", Type.GetType("System.String"))
dta1.Columns.Add("Col2", Type.GetType("System.Int32"))
'1行目の表示内容
workRow = dta1.NewRow()
workRow(0) = "1-1________"
workRow(1) = 11111
dta1.Rows.Add(workRow)
'2行目の表示内容
workRow = dta1.NewRow()
workRow(0) = "2-1"
workRow(1) = 2
dta1.Rows.Add(workRow)
dta1.TableName = "Dummy" '何か指定しないとエラーが出る
Dataview00.Table = dta1
Me.DataGrid1.ItemsSource = Dataview00
End Sub
Private Sub DataGrid1_AutoGeneratingColumn(sender As Object, e As System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs) Handles DataGrid1.AutoGeneratingColumn
Dim sty_右寄せ As New System.Windows.Style
Dim sty_中寄せ As New System.Windows.Style
sty_右寄せ.Setters.Add(New Setter(DataGridColumnHeader.HorizontalAlignmentProperty, HorizontalAlignment.Right))
sty_中寄せ.Setters.Add(New Setter(DataGridColumnHeader.HorizontalAlignmentProperty, HorizontalAlignment.Center))
Select Case e.PropertyName
Case "Col1"
e.Column.Header = "Col.1"
'↓CellStyleを中央寄せにすると列幅がズレる 左寄せ、右寄せでは発生しない
e.Column.CellStyle = sty_中寄せ
e.Column.DisplayIndex = 0
e.Column.Width = 150
e.Column.IsReadOnly = False
Case "Col2"
e.Column.Header = "Col.2"
e.Column.CellStyle = sty_右寄せ
e.Column.DisplayIndex = 1
e.Column.Width = 50
e.Column.IsReadOnly = False
End Select
End Sub
End Class
回答
-
sty_右寄せ.Setters.Add(New Setter(DataGridColumnHeader.HorizontalAlignmentProperty, HorizontalAlignment.Right)) sty_中寄せ.Setters.Add(New Setter(DataGridColumnHeader.HorizontalAlignmentProperty, HorizontalAlignment.Center))
の部分を
sty_右寄せ.Setters.Add(New Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right)) sty_中寄せ.Setters.Add(New Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center))
とするとよいようです。
参考サイト: http://stackoverflow.com/questions/720732/text-alignment-in-a-wpf-datagrid
- 回答としてマーク huahi11112 2017年1月17日 7:30
すべての返信
-
sty_右寄せ.Setters.Add(New Setter(DataGridColumnHeader.HorizontalAlignmentProperty, HorizontalAlignment.Right)) sty_中寄せ.Setters.Add(New Setter(DataGridColumnHeader.HorizontalAlignmentProperty, HorizontalAlignment.Center))
の部分を
sty_右寄せ.Setters.Add(New Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right)) sty_中寄せ.Setters.Add(New Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center))
とするとよいようです。
参考サイト: http://stackoverflow.com/questions/720732/text-alignment-in-a-wpf-datagrid
- 回答としてマーク huahi11112 2017年1月17日 7:30