J'essaie de personnaliser l'aspect d'une case à cocher dans WPF. J'espérais pouvoir récupérer le modèle de contrôle par défaut pour la classe BulletChrome définie dans PresentationFramework.Aero et travailler avec. Cependant, BulletChrome n'est pas une sous-classe de Control, il n'y a donc pas de modèle à modifier. Est-ce que quelqu'un sait que je pourrais le faire?Personnalisation de l'élément BulletChrome dans WPF
Répondre
Si vous voulez placer une sorte de BulletChrome dans le modèle « CheckBox où le BulletDecorator dans le modèle classique irait, vous pourriez le faire, puisque BulletChrome hérite de Decorator, qui hérite de FrameworkElement.
La prochaine partie, comment le BulletChrome obtient-il son apparence? Eh bien, c'est l'une des rares parties de WPF où ils traitent complètement le rendu sans xaml: L'apparence visuelle de ButtonChrome est définie dans sa méthode OnRender()
.
BulletChrome.OnRender(), du réflecteur:
protected override void OnRender(DrawingContext drawingContext)
{
Rect bounds = new Rect(0.0, 0.0, base.ActualWidth, base.ActualHeight);
this.DrawBackground(drawingContext, ref bounds);
this.DrawDropShadows(drawingContext, ref bounds);
this.DrawBorder(drawingContext, ref bounds);
this.DrawInnerBorder(drawingContext, ref bounds);
}
Malheureusement, étant donné que toutes ces méthodes appelées à l'intérieur OnRender() sont privées, vous ne pouvez pas jouer avec eux, même si vous la sous-classe ButtonChrome, peut-être seulement superposez une partie de votre rendu sur le dessus. Donc, fondamentalement, soit vous commencez à creuser le code de rendu dans Reflector et vous essayez de l'adapter et de le réécrire à vos besoins, soit vous lancez votre propre Template/Decorator/tout ce qui est à partir de zéro. (Mais alors ce n'est vraiment pas important ce que vous utilisez aussi longtemps que cela fonctionne, non?)
Espérons que cela a répondu à votre question, à votre santé.
Vous ne voulez pas faire cela. La modification du modèle de contrôle n'est pas censée modifier le comportement du contrôle, et un contrôle CheckBox, par définition, a trois états (coché, non coché, indéterminé).
Il est préférable de créer un contrôle personnalisé à 4 états (ou n états si vous préférez) qui emprunte beaucoup de Look/Feel au CheckBox ControlTemplate.
Juste pour clarifier, je n'essaie pas de changer le comportement. La case à cocher aura toujours trois états. Je veux juste personnaliser l'apparence de l'élément ButtonChrome en fonction de certaines conditions. – MadPokey
Si BulletChrome n'est pas personnalisable, vous ne pouvez pas le personnaliser. Mais vous pouvez certainement le remplacer par quelque chose qui est personnalisable.
En termes pratiques, je suggère de commencer avec le thème de Silverlight au lieu de Aero.
- 1. WPF contrôle Calendar personnalisation
- 2. Listbox Personnalisation de la barre de défilement dans WPF
- 3. DataGrid WPF - Problème Personnalisation d'un ComboBox
- 4. Encapsulation et personnalisation d'un contrôle WPF tiers
- 5. WPF: Personnalisation d'un datatemplate à l'aide d'une propriété de liaison
- 6. Visual C# WPF, personnalisation du composant de grille uniforme
- 7. Personnalisation de map.resources dans Rails
- 8. Personnalisation de l'arbre d'héritage DependencyObject
- 9. Personnalisation du menu de navigation dans SilverStripe
- 10. Personnalisation de default.master dans WSS 3.0
- 11. Personnalisation Option de réparation dans MSI
- 12. Personnalisation de fenêtres ancrables dans Visual Studio
- 13. Personnalisation de l'apparence d'UISlider
- 14. Personnalisation UIPickerview
- 15. Personnalisation MPMoviePlayerController
- 16. Personnalisation de DataGridView par utilisateur
- 17. Personnalisation de Google Recherche personnalisée
- 18. XmlAttributeOverrides poursuite de la personnalisation
- 19. Personnalisation du clavier de l'iPhone
- 20. Personnalisation de la sortie AntRunner
- 21. Personnalisation personnalisée Sharepoint
- 22. Personnalisation adaptateur log4j
- 23. Personnalisation des cellules dans l'application iPhone
- 24. Personnalisation d'un module DNN
- 25. Personnalisation des polices d'étiquettes dans Swing
- 26. Personnalisation du code HTTPstatus
- 27. Personnalisation visuelle IntelliSense Studio
- 28. Personnalisation Authentification w/MVC
- 29. personnalisation de modèle/rails de rechargement
- 30. Sous-modules git: personnalisation
Merci pour la bonne information! – MadPokey
Ce n'est pas très _WPF_ de Microsoft. – TernaryTopiary