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>

上記は、アプリケーション内のすべてのテキストボックス、ラベル、ボタンで機能します。ただし、DataGridでは機能しません。そこで、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 に答える