如何在WPF中应用ResourceDictionary的嵌套样式?

时间:2013-04-11 12:47:58

标签: wpf wpf-controls wpfdatagrid

我使用DataGrid(WPF 4.0)控件。它的样式放在ResourceDictionary中,并包含一个嵌套的Style元素:

<Style x:Key="MyDataGridStyle" TargetType="{x:Type controls:DataGrid}">
    <Setter Property="Background" Value="Black"/>
    <Setter Property="CellStyle">
        <Setter.Value>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="BorderThickness" Value="0" />
                <Setter Property="FocusVisualStyle" Value="{x:Null}" />
            </Style>
        </Setter.Value>
    </Setter>
</Style>

此处仅应用背景样式。 CellStyle NOT。

仅当我在DataGrid元素中直接定义CellStyle时才有效:

<DataGrid Style="{StaticResource MyDataGridStyle}">
       <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="BorderThickness" Value="0" />
                <Setter Property="FocusVisualStyle" Value="{x:Null}" />
            </Style>
       </DataGrid.CellStyle>
</DataGrid>

任何想法为什么?

更新

将样式与我在ResourceDictionary中引用的PresentationFramework.Aero主题混合时似乎存在问题。如果我删除了引用它就可以了!

1 个答案:

答案 0 :(得分:1)

按照你建议的方式对我做的很好,我会粘贴我用来测试你的风格的代码。 (注意我添加了background = red,所以我实际上可以看到是否正在应用样式)

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style x:Key="MyDataGridStyle" TargetType="{x:Type DataGrid}">
            <Setter Property="Background" Value="Black"/>
            <Setter Property="CellStyle">
                <Setter.Value>
                    <Style TargetType="{x:Type DataGridCell}">
                        <Setter Property="BorderThickness" Value="0" />
                        <Setter Property="Background" Value="Red"/>
                        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
                    </Style>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <DataGrid Style="{StaticResource MyDataGridStyle}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Text}"/>
            <DataGridTextColumn Binding="{Binding Tag}"/>
        </DataGrid.Columns>
        <DataGrid.Items>
            <TextBlock Text="Item1" Tag="aa"/>
            <TextBlock Text="Item2" Tag="bb"/>
            <TextBlock Text="Item3" Tag="cc"/>
            <TextBlock Text="Item4" Tag="dd"/>
        </DataGrid.Items>
    </DataGrid>
</Window>

结果

enter image description here