2009-04-06 94 views
44

Làm cách nào để căn chỉnh dữ liệu cột thành trung tâm trong WPF DataGrid?Căn chỉnh văn bản trong WPF DataGrid

+1

Đối với Silverlight, xem [answer] (http://stackoverflow.com/questions/7916226/column-aligment-in-a-silverlight-datagrid/7916301#7916301). –

Trả lời

40

Thật khó để nói mà không biết chi tiết cụ thể, nhưng đây là một DataGridTextColumn đó tập trung:

<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> 
+0

Làm việc tuyệt vời cho tôi ngay cả trong tháng 12 năm 2010! – ErocM

+6

Cách tiếp cận này không hiệu quả đối với tôi. Văn bản được căn giữa, nhưng chiều rộng ô không còn khớp với tiêu đề của nó nữa. Giải pháp của Mohammed hoạt động tốt nhất. –

+1

Như Kiff nói, tế bào cũng đang dịch chuyển. Bạn phải nhắm mục tiêu Textblock như Mohammed A. Fadil exemple. –

1

Ok, tôi đã sử dụng cách tiếp cận FrameworkElement nhưng có một hành vi kỳ lạ khi bạn cố gắng để làm nổi bật hàng.

Tôi đã đặt một ví dụ khác về căn chỉnh mã hóa WPF trong số thread này!

74

Nếu bạn đang sử dụng DataGridTextColumn bạn có thể sử dụng đoạn mã sau:

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

Đây là cách tốt nhất - đặt căn chỉnh trên ô làm cho ô không lấp đầy chiều rộng của nó, trông kỳ lạ khi hàng được chọn – bruceboughton

+1

Ban đầu, điều này không hiệu quả đối với tôi, nhưng sau một chút thử nghiệm và sửa một số lỗi trong mã giải pháp này làm việc tuyệt vời. cảm ơn! – BrianVPS

+0

@BrianVPS Chào mừng, tôi rất vui khi biết rằng: D –

12

+1 cho Kent Boogaart. tôi đã kết thúc làm điều này, mà làm cho mã hơi ít lộn xộn (và cho phép tôi sử dụng sự liên kết trên nhiều cột):

<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> 
+0

+1 cho kiểu, nhưng đối với tôi, 'HorizontalAlignment' không hoạt động trong khi' HorizontalContentAlignment' thực hiện. – Emmanuel

0

giải pháp ưa thích của tôi là:

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

4

Hoặc ở mã phía sau:

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

Tôi bắt đầu với giải pháp của huttelihut. Thật không may, điều đó không hiệu quả với tôi. Tôi chỉnh câu trả lời của mình và đến với điều này (giải pháp là để gắn kết các văn bản sang phải):

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

Như bạn thấy đấy, tôi đã áp dụng phong cách để một TextBlock, không phải là DataGridCell.

Và sau đó tôi phải đặt kiểu Phần tử, không phải kiểu Ô số.

ElementStyle="{StaticResource RightAligned}" 
+1

Xin lưu ý rằng điều này không làm việc với 'DataGridTextColumn' –

+0

@JP Hellemons: đối với tôi, nó đã làm việc với' DataGridTextColumn' – Mikhail

2

Tôi đã gặp sự cố với ô đang bị dịch chuyển và trông sôi nổi bằng câu trả lời được chấp nhận. Tôi biết đã muộn rồi, nhưng hy vọng những phát hiện của tôi sẽ giúp đỡ ai đó. Tôi sử dụng:

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

chứ không phải là CellStyle.

7

Dưới đây là câu trả lời @ XAML MohammedAFadil của, chuyển đổi sang C# mã sau:

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

Để áp dụng các Style, thiết lập CellStyle tài sản của DataGrid, ví dụ

var MyGrid = new DataGrid() { 
    CellStyle = MyStyle 
}; 
+1

Đơn giản và rõ ràng! +1 :) Chỉ cần những gì tôi cần. –

0

Cảm ơn Danny Beckett đã chuyển đổi câu trả lời XAML của @ MohammedAFadil, được chuyển thành mã C#. Tất cả các datagrids của tôi được thiết lập tự động, vì vậy tôi có thể thay đổi bất cứ điều gì, bất cứ khi nào.

Để thiết lập một DataGrid trống, không có gì trong đó và sau đó chỉ cần liên kết nó với dữ liệu, chỉ cần lấy dữ liệu của bạn.cột

 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 
     }); 
Các vấn đề liên quan