IT

WPF 데이터 그리드의 텍스트 정렬

itgroup 2023. 6. 2. 20:22
반응형

WPF 데이터 그리드의 텍스트 정렬

WPF에서 열 데이터를 중앙에 정렬하려면 어떻게 해야 합니까?DataGrid?

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에 적용했습니다.

그런 다음 스타일이 아닌 요소 스타일을 설정해야 했습니다.

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>

여기 @Mohammed다음 뒤에 있는 C# 코드로 변환된 Afadil의 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 Width="1*" Binding="{Binding Balance, StringFormat=C} "Header="Balance">
  <DataGridTextColumn.CellStyle>
      <Style>
        <Setter Property="TextBlock.TextAlignment"  Value="Right"/>
      </Style>
   </DataGridTextColumn.CellStyle>
 </DataGridTextColumn>

누군가가 여전히 이에 대한 답을 찾고 있다면, 저에게 효과가 있었던 것은 다음과 같습니다.

<DataGridTextColumn ...>
    <DataGridTextColumn.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Grid Background="{TemplateBinding Background}">
                            <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Left"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

알겠습니다. frameworkElement 접근 방식을 사용했는데 행을 강조 표시하려고 하면 이상한 동작이 발생했습니다.

스레드에 WPF 데이터 그리드 정렬의 다른 예를 추가했습니다!

제가 가장 좋아하는 솔루션은 다음과 같습니다.

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

@Mohammed를 개종시켜준 Danny Beckett에게 감사합니다.C# 코드로 변환된 Afadil의 XAML 응답입니다.모든 데이터 그리드가 동적으로 설정되므로 언제든지 원하는 것을 변경할 수 있습니다.

아무것도 없는 빈 데이터 그리드를 설정한 다음 데이터 그리드를 데이터에 바인딩하려면 datagrid.column을 사용합니다.

        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
        });

Bruno의 TextBlock을 정말 좋아합니다.텍스트 정렬 접근 방식입니다.이것을 수평 정렬과 함께 사용할 수 있습니다. 그러면 모든 배경이 전체 그리드 셀로 확장됩니다.

예(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))

언급URL : https://stackoverflow.com/questions/720732/text-alignment-in-a-wpf-datagrid

반응형