2

DataGrid があり、そのグリッドでは、一部の列が読み取り専用としてマークされています。

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <!-- this column is read only -->
        <DataGridTextColumn Header="Column A" Binding="{Binding Path=PropertyA}" IsReadOnly="True" />

        <!-- this column is EDITABLE -->
        <DataGridTextColumn Header="Name" Binding="{Binding Path=Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False" />

        <!-- this column is read only -->
        <DataGridTextColumn Header="Column C" Binding="{Binding Path=PropertyC}" IsReadOnly="True" />
    </DataGrid.Columns>

他の2つの列が編集できない場合、その「名前」列を編集可能なヘッダーで視覚的に区別できるようにします。ただし、DataGridColumn の IsReadOnly プロパティにアクセスできないようです。

私は効果的に次のようなことをしようとしています:

<DataGrid.ColumnHeaderStyle>
     <Style TargetType="DataGridColumnHeader" >
         <Style.Triggers>
             <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGridColumn}, Path=IsReadOnly}" Value="false">
                 <Setter Property="Background" Value="Azure" />
              </DataTrigger>
          </Style.Triggers>
      </Style>                                  
</DataGrid.ColumnHeaderStyle>

この質問から: WPF DataGrid の DataGridColumn の Binding Visible プロパティ 、 DataGridColumn はフレームワーク要素ではないため、を使用して見つけることができませんRelativeSource AncestorType=DataGridColumn。そのポスターは、静的リソースを使用してそれを見つけたと言っていますが、何を/どのように説明していません(そして、ポスターがそれをどのように解決したかについての質問があるいくつかの回答があります)

この質問: DataGridColumn から DataGridColumnHeader を取得する方法は? 、コードから取得できるように見えますが、これを単に xaml で汎用にして、任意のデータ グリッドに適用できるようにしたいと考えています。

私が見落としている簡単なものはありますか?

4

2 に答える 2