0

我有一个我试图应用到 DataGrid 的样式,但它只有在我给它一个键并明确说要使用它的情况下才有效。

<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 不会使用定义的隐式样式?为什么它需要显式样式?

4

1 回答 1

1

当我尝试它时,我得到了一个带有感叹号的绿色框,无论我为样式显式设置 x:Key 还是仅仅依赖它隐式出现。您的 DataGrid 是否有可能从代码中的其他位置继承了一种样式,该样式覆盖了应用程序的默认样式? 

于 2012-11-13T19:06:08.730 回答