我正在使用带有 DataGridTextColumn 的 WPF(C#、MVVM)。我想根据每个列的 IsReadOnly 属性设置其标题背景的样式。我想使用 DataTrigger,但我不知道如何设置源属性。我可以为每个 DataGridTextColumn 标题指定其自己的样式,但我希望所有文本列都有一种样式。
由于用户可以编辑列的内容 (IsReadOnly = "False"),因此 ColumnHeader 的背景必须设置为深蓝色。
<Style x:Key="EditableHeaderStyle" TargetType = "DataGridColumnHeader">
<Setter Property="Background" Value = "Light Blue"/>
<Style.Triggers>
<DataTrigger Binding="?**Source**... , Path= IsReadOnly" Value="True">
<Setter Property="Bacground" Value="Purple"/>
</DataTrigger>
<DataTrigger Binding="?**Source**...., Path=IsReadOnly" Value="False">
<Sette Property="Background" Value="Dark Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>
<DataGrid
Selectionunit = "FullRow"
ItemSource = "{Binding Persons}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" IsReadOnly = "True"/>
</DataGridClumns>
</DataGrid>
我尝试将绑定源设置为 ElementName,这有效,但仍在一个 DataGridTextColumn 上。我想将其设置为 DataGrid 中的所有 DataGridTextColumn。将样式设置为 HeaderStyle,以便在我的应用程序中的任何 DataGrid 上使用它。
请有人解释一下如何做到这一点。
由于 DataGridTextColumn 的 IsReadOnly 属性是在 xaml 中设置的,因此您可以查看以下代码以供参考:
风格
<Style x:Key="DataGridColumnHeaderStyle" TargetType = "DataGridColumnHeader">
<Setter Property="Background" Value = "DarkBlue"/>
<Setter Property="BorderBrush" Value = "Black"/>
<Setter Property="BorderThickness" Value = "0.5"/>
<Setter Property="HorizontalContentAlignment" Value = "Center"/>
赋予风格以控制
<DataGrid Margin="{StaticResource ControlThickness}" SelectionUnit = "FullRow">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly = "True" HeaderStyle="{StaticResource DataGridColumnHeaderReadOnlyStyle}" Header="H1" Width="40"/>
<DataGridTextColumn IsReadOnly = "False" HeaderStyle="{StaticResource DataGridColumnHeaderStyle}" Header="H2" Width="40"/>
<DataGridTextColumn IsReadOnly = "True" HeaderStyle="{StaticResource DataGridColumnHeaderReadOnlyStyle}" Header="H3" Width="40"/>
<DataGridTextColumn IsReadOnly = "False" HeaderStyle="{StaticResource DataGridColumnHeaderStyle}" Header="H4" Width="40"/>
</DataGrid.Columns>