web-dev-qa-db-ja.com

WPF DataGridのテキスト配置

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>
47
Kent Boogaart

DataGridTextColumnを使用している場合、次のコードスニペットを使用できます。

<Style TargetType="DataGridCell">
     <Style.Setters>
            <Setter Property="TextBlock.TextAlignment" Value="Center" />
     </Style.Setters>
</Style>
89

私はhuttelihutのソリューションから始めました。残念ながら、それは私にはまだうまくいきませんでした。私は彼の答えを微調整し、これを思いつきました(解決策はテキストを右に揃えることです):

<Resources>
    <Style x:Key="RightAligned" TargetType="TextBlock">
        <Setter Property="HorizontalAlignment" Value="Right"/>
    </Style>
</Resources>

ご覧のとおり、DataGridCellではなくTextBlockにスタイルを適用しました。

そして、Cellスタイルではなく、Elementスタイルを設定する必要がありました。

ElementStyle="{StaticResource RightAligned}"
19
Jan

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>
14
T.J.Kjaer

これは、C#コードビハインドに変換された@MohammedAFadilのXAMLの回答です。

var MyStyle = new Style(typeof(DataGridCell)) {
    Setters = {
        new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center)
    }
};

Styleを適用するには、CellStyleDataGridプロパティを設定します。

var MyGrid = new DataGrid() {
    CellStyle = MyStyle
};
9
Danny Beckett

またはコードビハインド:

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;
}
4
Hans

私は、受け入れられた答えを使用して、セルがシフトされ、ファンキーに見えることに問題がありました。遅れていることは知っていますが、私の発見が誰かの助けになることを願っています。私が使う:

<DataGridTextColumn.ElementStyle>
     <Style>
          <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
     </Style>

cellStyleではなく。

3
Rachael

私のお気に入りのソリューションは次のとおりです。

<DataGridTextColumn Header="My Column" Binding="{Binding MyDBValue}" Width="100" >
<DataGridTextColumn.CellStyle>
        <Style>
                <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
        </Style>
</DataGridTextColumn.CellStyle>
1
Web Developer

OK、frameworkElementアプローチを使用しましたが、行を強調表示しようとすると奇妙な動作がありました。

これにWPF Datagridの配置の別の例を入れました thread

1
Junior M

私にとってこれはうまく機能します

<DataGridTextColumn Width="1*" Binding="{Binding Balance, StringFormat=C} "Header="Balance">
  <DataGridTextColumn.CellStyle>
      <Style>
        <Setter Property="TextBlock.TextAlignment"  Value="Right"/>
      </Style>
   </DataGridTextColumn.CellStyle>
 </DataGridTextColumn>
0
Bruno Henn

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
        });
0
Stephen Himes