Pergunta

Eu tenho um estilo datagrid no 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>

Isso funciona muito bem para todos os meus datagrid em meus aplicativos. No entanto, para um dos meus datagrids, quero agrupar minhas linhas se uma coluna específica compartilhar os mesmos valores. Então, eu uso o seguinte nesse datagrid em 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: Agora, esse datagrid exibe tudo corretamente com base no meu estilo datagrid, exceto que exibe o texto (primeiro plano) como preto em vez do meu estilo.

Solução: Eu posso resolver o problema (embora não entenda por que isso é necessário) modificando meu representante de itens para qualquer um dos seguintes:

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

ou

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

Pergunta: Alguém pode explicar por que isso acontece e/ou oferecer uma solução melhor que garantirá que o meu representante de itens não substitua nenhum dos meus estilos de datagrid?

Obrigada!

Foi útil?

Solução

O estilo de cascata para baixo, a menos que a criança opte por substituir o estilo imposto. o ItemsPresenter No seu caso, possui valores padrão; que você não está substituindo em seu DataGrid estilo. Crie um ItemsPresenter estilo dentro App.xaml Para atender às suas necessidades ou modificar o valor localmente por meio de um estilo explícito ou implícito ou optar por sua solução proposta.

Também lembre -se de que você pode usar o BasedOn propriedade para herdar o estilo padrão; substituindo apenas certas propriedades.

BasedOn="{StaticResource {x:Type DataGrid}}"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top