Pregunta

Tengo un estilo de cuadrícula de datos en App.xaml:

<Style TargetType="{x:Type DataGrid}">
    <Setter Property="Foreground" Value="{StaticResource DataGridItemTextBrush}" />
    <Setter Property="VerticalGridLinesBrush" Value="{StaticResource GridBrush}" />
    <Setter Property="HorizontalGridLinesBrush" Value="{StaticResource GridBrush}" />
    <Setter Property="RowBackground" Value="Transparent" />
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="HeadersVisibility" Value="Column" />
    <Setter Property="AlternatingRowBackground" Value="#77000000" />
</Style>

Esto funciona muy bien para todos los de mi cuadrícula de datos que está en mis aplicaciones. Sin embargo, para uno de mis DataGrids, quiero mi grupo de filas si comparte una columna específica los mismos valores. Así que uso el siguiente en esa cuadrícula de datos en particular:

<DataGrid.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Path=Name}" Padding="3"/>
                </StackPanel>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
        <GroupStyle.ContainerStyle>
            <Style TargetType="{x:Type GroupItem}" >
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GroupItem}">
                            <Expander>
                                <Expander.Resources>
                                    <Style TargetType="{x:Type TextBlock}">
                                        <Setter Property="Foreground" Value="White" />
                                    </Style>
                                </Expander.Resources>
                                <Expander.Header>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding Path=Name, StringFormat=Set: {0}}" Margin="5,0"/>
                                        <TextBlock Text="{Binding Path=ItemCount, StringFormat=(\{0\} Games)}"/>
                                    </StackPanel>
                                </Expander.Header>
                                <ItemsPresenter />
                            </Expander>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </GroupStyle.ContainerStyle>
    </GroupStyle>
</DataGrid.GroupStyle>

Problema:. Ahora bien, esta cuadrícula de datos muestra todo correctamente basa en mi estilo de cuadrícula de datos, excepto que muestra el texto (en primer plano) como negro en lugar de mi estilo

Solución: puedo solucionar el problema (aunque no entiendo por qué esto es necesario) mediante la modificación de mi ItemsPresenter a cualquiera de los siguientes:

<ItemsPresenter TextElement.Foreground="{StaticResource DataGridItemTextBrush}"/>

o

<ItemsPresenter TextBlock.Foreground="{StaticResource DataGridItemTextBrush}" />

Pregunta:? ¿Puede alguien explicar por qué sucede esto y / u ofrecer una mejor solución que garantice que mi ItemsPresenter no anula ninguna de mis estilos DataGrid

Gracias!

¿Fue útil?

Solución

cascadas de estilo abajo a menos que el niño opta a anular el estilo impuesto. El ItemsPresenter en su caso tiene valores por defecto; que no prevalezcan dentro de su estilo DataGrid. O bien crear un estilo ItemsPresenter dentro App.xaml para satisfacer sus necesidades o modificar el valor localmente a través de un estilo explícito o implícito, o bien optar por la solución propuesta.

También hay que tener en cuenta que se puede utilizar la propiedad BasedOn para heredar el estilo predeterminado; anulando solamente ciertas propiedades.

BasedOn="{StaticResource {x:Type DataGrid}}"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top