2

私は 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 はありません。

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 テーマとスタイルを混在させると問題が発生するようです。参照を削除すると機能します。

4

1 に答える 1

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>

結果は

ここに画像の説明を入力

于 2013-04-11T12:58:36.827 に答える