DataGrid样式模板不适用于所有DataGrids

时间:2012-11-12 23:12:47

标签: wpf datagrid styles

我有一个我试图应用于DataGrid的Style,但它只有在我给它一个键并明确说要使用它时才有效。

<Application ...>
<Application.Resources>
<Style TargetType="{x:Type Control}" x:Key="ErrorStyle">
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <DockPanel LastChildFill="True">
                    <TextBlock DockPanel.Dock="Right" 
                        Foreground="Orange"
                        FontSize="12pt">
                        !!!!
                    </TextBlock>
                    <Border BorderBrush="Green" BorderThickness="1">
                        <AdornedElementPlaceholder />
                    </Border>
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource ErrorStyle}" />
<Style TargetType="Label" BasedOn="{StaticResource ErrorStyle}" />
<Style TargetType="Button" BasedOn="{StaticResource ErrorStyle}" />
<Style TargetType="DataGrid" BasedOn="{StaticResource ErrorStyle}" />
</Application.Resources>
</Application>

以上适用于我的应用程序中的所有文本框,标签,按钮。但它不适用于DataGrids。 然后我将DataGrids样式更改为:

<Style TargetType="DataGrid" BasedOn="{StaticResource ErrorStyle}" x:Key="DataGridErrorStyle" />

然后明确地将它添加到我的DataGrids中,如此

<DataGrid Name="myGrid" Style="{StaticResource ResourceKey=DataGridErrorStyle}" />

然后一切正常。

我只是想知道是否有人知道为什么DataGrid不会使用隐式样式定义?为什么需要显式样式?

1 个答案:

答案 0 :(得分:1)

当我尝试它时,我得到了一个带有惊叹号的绿色框,无论我是否明确设置了x:样式的键,或者只是隐含地依赖它。您的DataGrid是否可能从代码中的其他位置继承样式,该样式覆盖了应用程序的默认样式?