Question

J'ai un style DataGrid dans 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>

Cela fonctionne très bien pour tous mes DataGrid est dans mes applications. Cependant, pour un de mes datagrids, je veux regrouper mes lignes si une colonne spécifique partage les mêmes valeurs. Donc j'utiliser ce qui suit sur ce DataGrid particulier:

<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>

Problème:. Maintenant, ce DataGrid affiche tout correctement en fonction de mon style DataGrid, sauf qu'il affiche le texte (premier plan) en noir au lieu de mon style

Solution: Je peux résoudre le problème (bien que je ne comprends pas pourquoi cela est nécessaire) en modifiant mon ItemsPresenter à une des opérations suivantes:

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

ou

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

Question: Quelqu'un peut-il expliquer pourquoi cela se produit et / ou offrir une meilleure solution qui garantira que mon ItemsPresenter ne remplace pas l'un de mes styles DataGrid

?

Merci!

Était-ce utile?

La solution

cascades de style vers le bas, sauf si l'enfant décide de passer outre le style imposé. Le ItemsPresenter dans votre cas a des valeurs par défaut; que vous ne surchargez pas au sein de votre style DataGrid. Vous pouvez soit créer un style ItemsPresenter au sein App.xaml pour répondre à vos besoins ou modifier la valeur localement par un style explicite ou implicite, ou opter pour la solution proposée.

Gardez à l'esprit que vous pouvez utiliser la propriété BasedOn pour hériter du style par défaut; impérieuses que certaines propriétés.

BasedOn="{StaticResource {x:Type DataGrid}}"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top