2

J'ai créé une sous-classe ComboBox et ajouté mes fonctionnalités.Comment exposer les propriétés xaml?

Maintenant, je veux exposer les propriétés externes de la zone de texte par exemple:

<a:MyComboBox SpellCheck.IsEnabled="True" TextBox.SelectedText="{Binding X}" /> 

Est-ce possible, je ne l'ai pas peut-être choisi la mauvaise propriété particulière mais je suppose que vous comprenez ce que je veux dire.

Est-ce possible?
Dois-je créer toutes les propriétés individuellement?

+0

Qu'entendez-vous par "le TextBox"? Le modèle par défaut de votre sous-classe utilise un TextBox quelque part et vous voulez lier ce TextBox 'SelectedText - est-ce exact? – itowlson

+0

Oui mon cher ami – Shimmy

Répondre

1

Ceci n'est pas possible en XAML. XAML ne vous permet pas d'adresser des sous-propriétés de membres individuels en utilisant une syntaxe de chemin de propriété comme celle que vous décrivez. (Un similaire est possible pour certaines propriétés héritables telles que les arrière-plans et les tailles de police, mais qui utilise un mécanisme d'héritage - affectant tous les contrôles contenus - plutôt que d'adresser un sous-élément spécifique et ne fonctionnerait pas pour TextBox.SelectedText Donc oui, vous devrez déclarer des propriétés personnalisées sur la classe MyComboBox pour faire apparaître les fonctionnalités de la TextBox à laquelle vous devez accéder depuis l'extérieur de MyComboBox. Sur le plan positif, c'est une bonne discipline pour l'encapsulation: rappelez-vous qu'un futur développeur pourrait appliquer un modèle personnalisé à votre MyComboBox qui n'inclut pas de TextBox (ou le membre n'est pas nommé TextBox, ou le membre nommé TextBox est en fait un RichTextEditor au lieu d'un TextBox simple ...). Les propriétés explicites garantissent que MyComboBox définit clairement le comportement et l'état qu'un tel modèle doit respecter, et laisse le modèle décider de la manière de l'implémenter, plutôt que d'obliger l'auteur du modèle à toujours exposer un TextBox.