Domanda

Ho uno stile DataGrid in 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>

Questa grande opera per tutto il mio datagrid è nelle mie applicazioni. Tuttavia, per uno dei miei DataGrids, voglio gruppo mie righe se una colonna specifica condivide gli stessi valori. Così ho utilizzare il seguente su quel particolare DataGrid:

<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:. Ora questo DataGrid visualizza tutto correttamente in base alla mia stile DataGrid, tranne che visualizza il testo (in primo piano) come nero invece del mio stile

Soluzione: posso risolvere il problema (anche se non capisco il motivo per cui ciò sia necessario) modificando il mio ItemsPresenter a uno dei seguenti:

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

o

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

Domanda:? Qualcuno può spiegare perché questo accade e / o offrire una soluzione migliore che garantisca che il mio ItemsPresenter non sostituisce nessuno dei miei stili DataGrid

Grazie!

È stato utile?

Soluzione

Styling cascate giù a meno che i opta figlio di sovrascrivere lo stile imposto. Il ItemsPresenter nel tuo caso ha valori di default; che non abbiano la prevalenza all'interno del vostro stile DataGrid. O creare uno stile ItemsPresenter entro App.xaml per soddisfare le vostre esigenze o modificare il valore localmente tramite uno stile esplicita o implicita, oppure optare per la soluzione proposta.

Anche tenere a mente che è possibile utilizzare la proprietà BasedOn di ereditare lo stile di default; sovrascrivendo solo alcune proprietà.

BasedOn="{StaticResource {x:Type DataGrid}}"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top