6

私のプロジェクトの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}">

何か案は?

4

2 に答える 2

6

私を正しい方向に向けてくれてありがとうsnurre 。私は自分が望んでいたことを正確に達成する方法を見つけました。

ListView内にResourcesセクションを配置する必要はありません(各ListViewのこの種のカスタムタグは、最初に削除したかったものです)。代わりに、リソースをListViewスタイルに移動できます。

これが、私が望むように正確に機能する更新されたXAMLです。

<Window.Resources>
    <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle">
        <Setter Property="Background" Value="Wheat" />
    </Style>

    <Style TargetType="{x:Type list:MyListView}">
        <Style.Resources>
            <Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource MyHeaderStyle}" />
        </Style.Resources>

        <Setter Property="Background" Value="Linen" />                                   
    </Style>
</Window.Resources>

<list:MyListView>
    <list:MyListView.View>
        <GridView>
            <GridViewColumn Header="Column1" x:Name="col1" />
            <GridViewColumn Header="Column2" x:Name="col2" />
        </GridView>
    </list:MyListView.View>
</list:MyListView>
于 2012-01-05T07:05:43.887 に答える
3

キーがない場合は、指定されたのすべての要素に適用されますTargetType。スタイルにキーがある場合は、それを明示的に使用する必要があります。

<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Column1"/>

または、内でスタイルを設定してListView、その中の要素にのみ適用することもできます。

<list:MyListView>
    <list:MyListView.Resources>
        <Style TargetType="{x:Type GridViewColumnHeader}">
            <Setter Property="Background" Value="Wheat" />
        </Style>
    </list:MyListView.Resources>
</list:MyListView>
于 2012-01-04T10:08:33.737 に答える