Manière correcte de remplacer les valeurs de style dans WPF
Je veux éditer le style de cellule d'un DataGrid
en WPF. Alors, en utilisant l'Expression Blend-je le droit d'aller à des Objets et à la Chronologie>>DataGrid>>Modifier d'autres Modèles>>Modifier CellStyle>>Modifier une Copie
Voici ce que ce qui apparaît sur la page:
<SolidColorBrush x:Key="{x:Static DataGrid.FocusBorderBrushKey}" Color="#FF000000"/>
<Style x:Key="DataGridCellStyle1" TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/>
</Trigger>
</Style.Triggers>
</Style>
Mais je veux seulement changer le rembourrage et le fond. Au lieu de cela, il m'a donné 25 lignes de code, y compris la cellule de modèle! Ai-je raté quelque chose, est-il un meilleur moyen d'éléments de style comme ça, sans avoir à apporter tant de code inutile lorsque je souhaite modifier deux articles?
source d'informationauteur Jim_CS
Vous devez vous connecter pour publier un commentaire.
Découvrez le "Basée" attribut pour les Styles...
Par exemple le style suivant prend tout de DataGridColumnHeader et remplace uniquement les HorizontalContentAlignment propriété:
Un contrôle majeur des modèles en WPF vous oblige à remplacer complètement le modèle. Vous pouvez avoir voulu changer juste l'un des aspects du modèle, mais le résultat de cela est l'Expression de dumping d'une copie du reste du modèle de sorte qu'il peut être remplacée. Assurez-vous que vous êtes à la substitution de la cellule de la bonne façon (je ne suis pas sûr qu'il y a une autre manière). Certains contrôles (
ListView
vient à l'esprit) qui vous permettra d'échanger des modèles de données sans écraser l'ensemble du modèle de contrôle, mais je ne suis pas sûr que ce soit que vous voulez, ou si cela peut être fait avecDataGrid
.Voir la réponse à cela: Remplacer une partie de modèle par défaut dans WPF
À faire ce que vous voulez faire, vous devez généralement il suffit de régler l'arrière-plan et du Remplissage des propriétés dans un style:
Toutefois, dans ce cas, il semble que le modèle de contrôle par défaut pour DataGridCell ignore la valeur de remplissage, de sorte que vous aurez besoin de le remplacer par une mise en œuvre qui ne l'est pas. Ce qui suit est basé sur le modèle par défaut que vous avez posté: