33 wpf datagrid wpftoolkit word-wrap
我想在我的DataGrid的所有列标题上启用文本换行,而不禁用其他默认标题功能,例如列调整大小,排序方向指示符等.
有没有办法做到这一点?
Nat*_*ate 43
或者不要打扰app.xaml文件中的原语并执行以下操作(我的对象):
<DataGrid Name="WBdataGrid" AutoGenerateColumns="False" ColumnHeaderHeight="50" >
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding}"></TextBlock>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns> ...
Run Code Online (Sandbox Code Playgroud)
Mik*_*ill 22
我想在我的DataGrid的所有列标题上启用文本换行,而不禁用其他默认标题功能
您需要将以下命名空间添加到app.xaml文件中:
xmlns:primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"
Run Code Online (Sandbox Code Playgroud)
然后将此标记添加到app.xaml:
<Style TargetType="{x:Type primitives:DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding}"></TextBlock>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
这将在整个WPF应用程序中为所有DataGrids的标题添加文本换行.
虽然我们讨论的主题是,如果您只想将每个DataGrid标题的文本居中,可以使用以下样式代替:
<Style TargetType="{x:Type primitives:DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
然而,我见过很多 WPF文章,建议你只能通过在每个DataGrid列上单独添加TextWrapping或HorizontalAlignment来实现:
<toolkit:DataGridTextColumn Binding="{Binding Path=TaxAmount}">
<toolkit:DataGridTextColumn.HeaderTemplate >
<DataTemplate>
<TextBlock Text="Tax Amount" Width="90" TextWrapping="Wrap" HorizontalAlignment="Center"/>
</DataTemplate>
</toolkit:DataGridTextColumn.HeaderTemplate>
</toolkit:DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)
DJ *_*Wyk 12
我添加
到标题文本,我希望文本包装.当您不需要将标题文本绑定到某些内容时,这非常有用
<DataGridTextColumn x:Name="cAccountNumber" Header="Account
 Number" Width="80" Binding="{Binding Path=AccountNumber}" />
Run Code Online (Sandbox Code Playgroud)
小智 10
我没有直接将列名分配给DataGridColumn.Header属性,而是创建了一个包含列名的TextBlock,将TextBlock的TextWrapping属性设置为"Wrap",并将TextBlock分配给DataGridColumn.Header属性.这将保留默认标头功能.
例:
<toolkit:DataGridTextColumn Binding="{Binding Path=MyProperty}">
<toolkit:DataGridTextColumn.Header>
<TextBlock Text="Something Longer" TextWrapping="Wrap" />
</toolkit:DataGridTextColumn.Header>
</toolkit:DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)
您可以Style为您的列标题创建一个全局的。没有任何示例标记,我不知道语法,但它应该看起来像这样:
<Style TargetType="{x:Type dg:ColumnHeader}">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
由于它Style是无键的,因此它将自动应用于所有列标题。并且样式不会覆盖任何本地设置的属性,因此它不会“禁用”任何现有的标头功能。