Comment ajouter un déclencheur à un contrôle personnalisé WPF sans surcharger le style existant?
Je suis entrain de créer un contrôle personnalisé simple s'étendant à partir d'un bouton bascule qui permet à l'utilisateur de spécifier enregistrés et non le contenu directement dans le XAML. Il fonctionne bien mais il est basé sur un déclencheur, et je ne sais pas comment le définir le déclenchement de l'exception dans un style. Si je définir le style, puis-je perdre quoi que ce soit réglé en dehors du contrôle personnalisé.
Ce que je voudrais être en mesure de faire est de simplement ajouter cette déclencher à n'importe quel style de jeu ailleurs que sur le contrôle.
Voici le code XAML pour le style/déclencheur.
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource Self}, Path=UncheckedContent}" />
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content"
Value="{Binding RelativeSource={RelativeSource Self}, Path=CheckedContent}" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
J'ai essayé d'en hériter le style via la Basée avec un type par défaut, mais cela ne fonctionnera pas si le contrôle personnalisé explicitement de style défini par son parent. J'ai également considéré comme EventTriggers mais je ne crois pas qu'il y aurait un événement pour initialiser le contrôle.
Merci pour toute aide, n'importe qui peut offrir. 🙂
source d'informationauteur Steve Cadwallader | 2009-09-29
Vous devez vous connecter pour publier un commentaire.
Juste pour éclaircir les choses sur la terminologie ici: Un de contrôle de l'utilisateur est un contrôle qui dérive de la classe UserControl. Si j'ai bien compris vous avez droit dérivée à partir de ToggleButton pour ajouter le UncheckedContent et CheckedContent propriétés. Dans ce cas, vous avez créé un contrôle personnalisé. Il est toujours plus facile à suivre si nous sommes d'accord sur une terminologie commune 🙂
Comme je sais que vous ne pouvez pas faire un tel style générique de l'héritage dans le code XAML. Vous devez toujours spécifier de manière explicite que le style d'un autre style est basé sur. Votre style peut être basé soit sur le style par défaut pour ToggleButton ou sur un autre style. Si vous ne pouvez pas construire un style de chaîne d'héritage qui le respecte, cette approche ne fonctionnera pas.
Mais puisque vous avez un contrôle personnalisé, que vous ne pourriez pas écrire d'un style par défaut pour ce qui est fondée sur le défaut le bouton à bascule de style de ce genre?
Alors à chaque fois que vous appliquez une explicite style d'un bouton à bascule vous permettrait de préciser qu'il est basé sur la valeur par défaut le bouton à bascule de style.
Aussi, vous pourriez écrire un (par défaut) modèle de contrôle de votre nouveau bouton bascule dans Themes\Générique.xaml qui contient le au-dessus de déclencheurs. Dans le mélange, vous pouvez obtenir une copie du modèle par défaut pour le bouton à bascule ("Modifier le Modèle"->"Modifier une Copie") de sorte que vous pouvez vous assurer que votre bouton à bascule ressemble exactement à la normale le bouton à bascule. Incorporer ensuite les déclencheurs ci-dessus dans ce modèle.
BTW: vous n'avez pas à créer un nouveau contrôle juste pour ajouter de nouvelles propriétés. Vous pouvez ajouter de nouvelles propriétés d'un contrôle existant à l'aide de propriétés attachées. Ils peuvent être utilisés à partir de XAML comme les propriétés.