Quelle est la bonne façon de déclencher sur plusieurs conditions dans un style WPF
Mon application WPF a un DataGrid
de contrôle. J'ai un style personnalisé par défaut pour le DataGridRow
classe qui fonctionne bien. Toutefois, pour ce DataGrid
sur un écran, j'ai besoin d'un autre style personnalisé.
Les Éléments de chaque ligne ont un bool
bien que, lorsqu'il est défini, je veux afficher cette ligne avec un autre premier plan et la couleur d'arrière-plan. Toutefois, lorsque la ligne est sélectionnée ET lorsque cette propriété est définie, je veux donner un avant-plan et arrière-plan de couleur pour indiquer qu'il est sélectionné ET que la propriété est définie sur true.
Voici ce que j'ai essayé:
<Style TargetType="DataGridRow" x:Key="CameraStyle">
<Setter Property="Foreground" Value="{DynamicResource TextForeground}" />
<Setter Property="Background" Value="{DynamicResource DataBackground}" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsSelected" Value="False" />
<Condition Binding="{Binding Path=IsInLiveMode}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="Red" />
<Setter Property="Background" Value="Yellow" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Binding="{Binding Path=IsInLiveMode}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="DarkOrange" />
<Setter Property="BorderBrush" Value="{DynamicResource DataBorder}" />
<Setter Property="Foreground" Value="DarkRed" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
Cela me donne une "Liaison doit être non null," erreur, je pense que se passe car il n'est pas Binding
bien sur la première condition dans le MultiDataTrigger.
Quelle est la façon correcte d'écrire ceci dans le code XAML?
EDIT:
Après avoir essayé nemesv & Rachel, en réponse, le code compile et s'exécute. Toutefois, les couleurs que j'ai choisis pour le IsSelected = true et IsInLiveMode = true cas ne sont pas montrés. Voici ce que j'ai maintenant:
<Style TargetType="DataGridRow" x:Key="CameraStyle">
<Setter Property="Background" Value="{DynamicResource DataBackground}" />
<Setter Property="Foreground" Value="{DynamicResource TextForeground}" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Self}}" Value="False" />
<Condition Binding="{Binding Path=IsInLiveMode}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Yellow" />
<Setter Property="Foreground" Value="Red" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Self}}" Value="True" />
<Condition Binding="{Binding Path=IsInLiveMode}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="{DynamicResource DataBackgroundSelected}" />
<Setter Property="BorderBrush" Value="{DynamicResource DataBorder}" />
<Setter Property="Foreground" Value="{DynamicResource DataForegroundSelected}" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Self}}" Value="True" />
<Condition Binding="{Binding Path=IsInLiveMode}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="DarkOrange" />
<Setter Property="BorderBrush" Value="{DynamicResource DataBorder}" />
<Setter Property="Foreground" Value="DarkRed" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
Toutes les idées sur le pourquoi de l'affaire en question n'est pas de travail?
source d'informationauteur Tony Vitabile
Vous devez vous connecter pour publier un commentaire.
Votre assumptution est correcte concernant le manque de liaison.
À partir de MSDN MultiDataTrigger.Conditions:
Vous pouvez résoudre ce problème en utilisant RelativeSource Auto à référez-vous à la liaison:
Vous utilisez un
MultiDataTrigger
qui est encore unDataTrigger
et s'attend à une liaisonCommutateur
Property="IsSelected"
dans votreCondition
à