Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 从ListView样式内部设置GridViewColumnHeader样式_Wpf_Listview_Gridview_Columnheader - Fatal编程技术网

Wpf 从ListView样式内部设置GridViewColumnHeader样式

Wpf 从ListView样式内部设置GridViewColumnHeader样式,wpf,listview,gridview,columnheader,Wpf,Listview,Gridview,Columnheader,在我的一个项目中,我继承了一个ListView,并通过设置一个新的控件模板来覆盖样式。我还覆盖了列标题样式。到目前为止,我找到了两种方法: 1) 通过设置样式键并在GridView中引用样式: <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> <Setter Property="Background" Value="Wheat" /> </Style> &

在我的一个项目中,我继承了一个ListView,并通过设置一个新的控件模板来覆盖样式。我还覆盖了列标题样式。到目前为止,我找到了两种方法:

1) 通过设置样式键并在GridView中引用样式:

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

<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}">

2) 通过不为上述样式设置样式键。现在,我不需要在GridView中引用样式,但它也会覆盖应用程序中的所有listview头,而与listview类型无关

由于我在应用程序中使用了许多ListView,因此我希望以第三种更灵活的方式来实现这一点;通过从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}">


有什么想法吗?

如果没有键,它将应用于指定的
TargetType
的所有元素。如果样式有键,则必须显式使用它:

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

感谢snurre为我指明了正确的方向。我找到了一个方法来实现我想要的

您不需要将Resources部分放在ListView中(对于每个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>

<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>