En utilisant les instructions de ce cher @Mario Vernari, j'ai découvert que le problème était dû à une mauvaise stratégie que j'avais utilisée pour créer mon UserControl. Je voulais créer un UserControl qui puisse en contenir d'autres. J'avais donc essayé ceci :
<UserControl x:Class="MyNamespace.MyUserControl"
...
Style="{DynamicResource ResourceKey=MyUserControlStyle}">
<UserControl.Resources>
...
<Style x:Key="MyUserControlStyle" TargetType="{x:Type UserControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type UserControl}">
<Border BorderBrush="{Binding Path=DP1}">
...
<ContentPresenter ... Content="{TemplateBinding Content}"/>
...
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
</UserControl>
Où DP1
est une propriété de dépendance de type Brush
. Le UserControl qui a été créé de cette manière fonctionne si vous définissez ses propriétés (comme DP1
) directement. Absolument, ce n'est pas la bonne méthode, comme @Mario me l'a dit :
...Lorsque vous utilisez un UserControl, cela signifie que vous déjà connaît sa mise en page, et il n'est pas nécessaire de styliser davantage le contrôle. Vous définissez son style deux fois en même temps il en résulte une collision...
Et il a ajouté :
Au lieu de cela, vous devez utiliser un CustomControl ; définissez le style par défaut dans le fichier Thèmes (si vous possédez Visual Studio ordinaire, cela se fait automatiquement). Ensuite, vous pouvez contourner le style par défaut dans votre propre application. De la même manière que vous le feriez pour une classe de base normale et ses dérivés.
Suivez ça : http://www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...
Évidemment, dans ce cas, nous devons dériver notre contrôle sans regard à partir de ContentControl
(au lieu de Control
). Vous pouvez consulter este & este pour maîtriser les détails.
Ici, je remercie à nouveau @Mario. ;)