私のプロジェクトの1つでは、ListViewを継承し、新しいコントロールテンプレートを設定してスタイルをオーバーライドしました。また、列ヘッダースタイルをオーバーライドしました。これまでのところ、これを行うには2つの方法があります。
1)スタイルキーを設定し、GridViewでスタイルを参照することにより:
<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle">
<Setter Property="Background" Value="Wheat" />
</Style>
<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}">
2)上記のスタイルにスタイルキーを設定しない。これで、GridViewでスタイルを参照する必要はありませんが、リストビューの種類に関係なく、アプリケーションのすべてのリストビューヘッダーもオーバーライドされます。
私は自分のアプリケーションで多くのリストビューを使用しているので、これを3番目のより柔軟な方法で実現したいと思います。ListViewスタイル内からGridView.ColumnHeaderContainerStyleを設定します。そうすれば、各GridViewのヘッダースタイルを参照する必要がなくなります。これまでのXAMLの簡略化されたバージョンは次のとおりです。
<Window.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle">
<Setter Property="Background" Value="Wheat" />
</Style>
<Style TargetType="{x:Type list:MyListView}">
<Setter Property="GridView.ColumnHeaderContainerStyle" Value="{StaticResource MyHeaderStyle}" />
<Setter Property="Background" Value="Linen" />
</Style>
</Window.Resources>
<list:MyListView>
<list:MyListView.View>
<GridView>
<GridViewColumn Header="Column1" />
<GridViewColumn Header="Column2" />
</GridView>
</list:MyListView.View>
</list:MyListView>
残念ながら、これはヘッダースタイルを設定しません...上記のXAMLにこの変更を加えると、次のように機能します。
<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}">
何か案は?