Donc, j'ai cette fenêtre avec quelques contrôles. Dans la section des ressources que j'ai défini ce style:Pourquoi ce DataTrigger de modifier le style d'élément basé sur la propriété attachée ancêtre ne fonctionne pas?
<Style x:Key="StyleNavBar" TargetType="{x:Type Grid}">
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentTheme, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">
<DataTrigger.Value>
<theme:WinTheme>WindowsClassic</theme:WinTheme>
</DataTrigger.Value>
<Setter Property="Background" Value="#FFFFFFFF" />
</DataTrigger>
</Style.Triggers>
</Style>
Dans ma fenêtre, je définir une propriété attachée nommé « CurrentTheme » qui stocke (basé sur un ENUM) le thème actuel utilisé l'échelle du système. Voici le code:
public static readonly DependencyProperty CurrentSystemThemeProperty =
DependencyProperty.RegisterAttached(
"CurrentSystemTheme",
typeof(WinTheme),
typeof(MainWindow),
new UIPropertyMetadata(WinTheme.AeroGlass));
public WinTheme CurrentTheme
{
get
{
return (WinTheme)GetValue(CurrentSystemThemeProperty);
}
set
{
SetValue(CurrentSystemThemeProperty, value);
}
}
Chaque fois que l'utilisateur change le thème du système, ma fenêtre reçoit un rappel via WndProc, informant que le thème a changé. Et, comme vous pouvez le voir, la valeur par défaut de la propriété CurrentTheme est WinTheme.AeroGlass. Ensuite, j'ai une grille de style avec le style défini ci-dessus:
<Grid Height="34" Name="grdNavBar" VerticalAlignment="Top" Style="{DynamicResource StyleNavBar}">
Mon but est de changer le style en fonction de la valeur de CurrentTheme, mais le déclencheur défini ci-dessus ne fonctionne pas lorsque les changements de thème (cela fonctionne uniquement avec la valeur par défaut de CurrentTheme, c'est-à-dire, ne réagit pas aux changements dans la propriété).
Des idées sur la façon d'accomplir cela?
Merci, Ian. Quelle erreur stupide :). Cela a fonctionné maintenant. Et merci pour le conseil. – EdMelo