如何将样式写入 WPF DataGridColumnHeader
本文关键字:WPF DataGridColumnHeader 样式 | 更新日期: 2023-09-27 18:31:00
我想为 WPF DataGrid 列标题编写样式。我的网格如下
`<DataGrid >
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<Label Content="{DynamicResource colName}"></Label>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>`
我想使用动态资源绑定标签内容。此代码工作正常。我想编写一种样式以将此绑定方法应用于网格列。我把风格写成下面。
`<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridColumnHeader">
<Label Content="{ TemplateBinding Content}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>`
我将这种样式应用于网格,如下所示。
<DataGrid >
<DataGrid.Columns>
<DataGridTextColumn HeaderStyle="{StaticResource ColumnHeaderStyle}" Header="{ DynamicResource colName}" />
</DataGrid.Columns>
</DataGrid>
使用样式标题后不绑定。如何解决这个问题?
谢谢!
我们可以尝试如下
<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type dg:DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Background" Value="Black" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="dg:DataGridColumnHeader">
<dg:DataGridHeaderBorder
x:Name="headerBorder"
Background="Red">
<Border BorderThickness="1"
CornerRadius="2"
Background="Black"
BorderBrush="Green">
<Grid>
<TextBlock Text="{TemplateBinding Content}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
TextWrapping="Wrap"/>
</Grid>
</Border>
</dg:DataGridHeaderBorder>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<dg:DataGrid Grid.Row="1" Grid.RowSpan="1"
Name="UserName"
HorizontalAlignment="Left"
AutoGenerateColumns="True"
Width="800"
Background="Yellow"
ColumnHeaderHeight="20"
ColumnHeaderStyle="{DynamicResource ColumnHeaderStyle}"
RowStyle="{StaticResource RowStyle}"
CanUserAddRows="False"
CanUserDeleteRows="False"
/>
将Header
定义为StaticResource
而不是动态。这将解决您的问题
<DataGridTextColumn HeaderStyle="{StaticResource ColumnHeaderStyle}" Header="{ StaticResource colName}" />
或者,您可以更新控件模板的标签,使其具有DynamicResource
,并且不需要提供Header
。
<ControlTemplate TargetType="DataGridColumnHeader">
<Label Content="{ DynamicResource colName}"/>
</ControlTemplate>