如何根据DatagridTextColumn的IsReadOnly属性设置DatagridTextColumn.Header的Backgroundcolor

问题描述 投票:0回答:1

我正在使用带有 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 上使用它。

请有人解释一下如何做到这一点。

wpf xaml datatrigger datagridtextcolumn
1个回答
0
投票

由于 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>
© www.soinside.com 2019 - 2024. All rights reserved.