2009-05-06 8 views
5

Y at-il un moyen de faire un contrôle "click-to-edit" en silverlight? J'ai quelques éléments qui seront affichés dans un contrôle treeview, et je voudrais que les étiquettes soient éditables directement dans l'arborescence.Click-to-edit dans Silverlight

Quelqu'un sait-il comment faire?

+1

Le lien http://stackoverflow.com/questions/2088909/inline-editing-textblock-in-a-listbox-with-data-template-wpf/7687402#7687402 donne le contrôle utilisateur click-to-edit. J'espère que cela t'aides. – Youngjae

Répondre

9

Très facile en fait. J'ai mis en œuvre de nombreuses formes avec un tel mécanisme d'échange.

Vous pouvez le faire en utilisant un convertisseur et faire un simple conversion de BooleanToVisibility sur une propriété IsEditable qui existe sur les entités qui vous lient à votre TreeView. Dans votre TreeView ItemTemplate, il suffit de lier le TextBlock de telle sorte qu'il soit réduit chaque fois que la propriété IsEditable est vraie et de lier le TextBox de telle sorte qu'il soit collé lorsque la propriété IsEditable est false (et vice versa).

Si vous voulez construire un contrôle ClickToEdit personnalisé vous devez faire ce qui suit:

  1. Créer une classe qui hérite de ContentControl
  2. Expose une nouvelle propriétés de dépendance de type DataTemplate: celui qui est appelé EditableTemplate.
  3. Ajouter un gestionnaire d'événements MouseLeftButtonUp dans votre OnApplyTemplate pour écouter le clic.
  4. Modifiez le modèle de contenu actif en votre EditableTemplate sur l'événement click.
  5. Modifiez le modèle lorsque le contrôle perd le focus.

maintenant à utiliser votre contrôle personnalisé à l'intérieur TreeView:

  1. supplante vos ItemTemplate pour votre TreeView
  2. Mettez votre contrôle ClickToEdit personnalisé à l'intérieur il

La mise en œuvre d'un contrôle personnalisé vous permettrait (ou d'autres développeurs) pour spécifier facilement quel contrôle ils voulaient utiliser comme éditeur de contenu. Par exemple, ils peuvent spécifier un NumericUpDown ou un DateTimePicker au lieu de simplement utiliser un TextBox.

Check out DataForm dans Silverlight 3. Il a une fonctionnalité similaire, mais la commutation de la lecture seule par rapport modifiable ne se fait pas par un clic.

+0

Pouvez-vous me dire comment mettre l'accent sur le contrôle (TextBox) de EditableTemplate quand je change le ContentTemplate sur le clic de bouton? – Jehof

+0

Je suis coincé à l'étape N 5 .. Voici mon code http://stackoverflow.com/questions/28613473/click-to-edit-control-lostfocus-event-issue –