none
WPF支持样式嵌套吗,怎么去实现 RRS feed

  • 问题

  • 如题,我在使用WPF制作表格时,因为要使用自定义样式,来规整DataGrid的样式

    但在编码的过程中,遇到了如下问题:

    比如说,我定义一个DataGrid样式为A,DataGridCell样式为B,DataGridColumnHeader样式为C,

    然后我在DataGrid编码的过程中就必须要设置style=A,CellStyle=B,ColumnHeaderStyle=C.

    但是我在尝试直接在DaraGird的样式中嵌套CellStyle以及其他Style都提示我找不到对应的资源,请问能实现样式的嵌套吗,

    如果能实现的话,要怎样去做?

    2015年12月16日 6:34

答案

  • 经过我的测试,你需要的这种效果是可以实现的。

        <Grid>
            <Grid.Resources>
                <Style TargetType="DataGridColumnHeader" x:Key="DataGridColumnHeaderStyle">
                    <Setter Property="Background" Value="Aqua" />
                </Style>
                <Style TargetType="DataGridCell" x:Key="DataGridCellStyle">
                    <Setter Property="Background" Value="Gray" />
                </Style>
                <Style TargetType="DataGrid" x:Key="DataGridStyle">
                    <Setter Property="Background" Value="SkyBlue" />
                    <Setter Property="ColumnHeaderStyle" Value="{StaticResource DataGridColumnHeaderStyle}" />
                    <Setter Property="CellStyle" Value="{StaticResource DataGridCellStyle}" />
                </Style>
            </Grid.Resources>
            <DataGrid ItemsSource="{Binding Data}" Style="{StaticResource DataGridStyle}" />
        </Grid>

    根据你的描述,你定义的样式A似乎位于它引用的样式B、C前面。在WPF中,使用StaticResource方式引用的资源,必须在引用位置之前定义;如A引用了B、C,那么B、C必须在A之前定义。

    因此,你可以尝试将Header和Cell的样式定义放在DataGrid样式定义的前面,或者使用DynamicResource替代StaticResource。


    2015年12月18日 2:45

全部回复

  • WPF 样式嵌套,如果想要用这样的效果,应该怎样实现。。。。

            <Style x:Key="OpacityDataGridStyle" TargetType="{x:Type DataGrid}">
                <Setter Property="ColumnHeaderStyle" Value=""></Setter>
            </Style>

    2015年12月17日 9:20
  • 经过我的测试,你需要的这种效果是可以实现的。

        <Grid>
            <Grid.Resources>
                <Style TargetType="DataGridColumnHeader" x:Key="DataGridColumnHeaderStyle">
                    <Setter Property="Background" Value="Aqua" />
                </Style>
                <Style TargetType="DataGridCell" x:Key="DataGridCellStyle">
                    <Setter Property="Background" Value="Gray" />
                </Style>
                <Style TargetType="DataGrid" x:Key="DataGridStyle">
                    <Setter Property="Background" Value="SkyBlue" />
                    <Setter Property="ColumnHeaderStyle" Value="{StaticResource DataGridColumnHeaderStyle}" />
                    <Setter Property="CellStyle" Value="{StaticResource DataGridCellStyle}" />
                </Style>
            </Grid.Resources>
            <DataGrid ItemsSource="{Binding Data}" Style="{StaticResource DataGridStyle}" />
        </Grid>

    根据你的描述,你定义的样式A似乎位于它引用的样式B、C前面。在WPF中,使用StaticResource方式引用的资源,必须在引用位置之前定义;如A引用了B、C,那么B、C必须在A之前定义。

    因此,你可以尝试将Header和Cell的样式定义放在DataGrid样式定义的前面,或者使用DynamicResource替代StaticResource。


    2015年12月18日 2:45
  • 感谢!!原来真的是因为位置的问题!太感谢啦!
    2015年12月21日 7:39