2009-05-06 17 views
5

¿Hay alguna forma de hacer un control de "haga clic para editar" en Silverlight? Tengo algunos elementos que se mostrarán en un control treeview, y me gustaría que las etiquetas sean editables directamente en la vista de árbol.Haga clic para editar en Silverlight

¿Alguien sabe cómo hacer esto?

+1

El enlace http://stackoverflow.com/questions/2088909/inline-editing-textblock-in-a-listbox-with-data-template-wpf/7687402#7687402 proporciona el control de usuario click-to-edit. Espero que esto ayude. – Youngjae

Respuesta

9

Muy fácil en realidad. He implementado muchas formas con dicho mecanismo de intercambio.

Puede hacer esto usando un convertidor y realizar una simple conversión BooleanToVisibility en una propiedad IsEditable que exista en las entidades que vincula a su TreeView. Dentro de su TreeView ItemTemplate simplemente enlace el TextBlock de tal manera que se Colapsó siempre que la propiedad IsEditable sea verdadera y vincule el TextBox de tal manera que se collapesed cuando la propiedad IsEditable sea falsa (y viceversa).

Si usted quiere construir un control ClickToEdit a medida que tendría que hacer lo siguiente:

  1. crear una clase que hereda de ContentControl
  2. exponer una nuevas propiedades de dependencia de tipo DataTemplate: uno llamado EditableTemplate.
  3. Agregue un controlador de eventos MouseLeftButtonUp dentro de su OnApplyTemplate para escuchar el clic.
  4. Cambie la plantilla de contenido activo para que sea su EditableTemplate en el evento click.
  5. Cambia la plantilla cuando el control pierde el foco.

Ahora para utilizar el control personalizado en el interior TreeView:

  1. anular su ItemTemplate para su TreeView
  2. Deja tu control ClickToEdit personalizada en el interior hay

La implementación de un control personalizado le permitiría (u otros desarrolladores) para especificar fácilmente qué control querían usar como editor de contenido. Por ejemplo, podrían especificar un NumericUpDown o un DateTimePicker en lugar de simplemente usar un TextBox.

Eche un vistazo a DataForm en Silverlight 3. Tiene una funcionalidad similar pero la conmutación entre editable y de solo lectura no se realiza con un clic.

+0

¿Puede decirme cómo establecer el foco en el control (TextBox) de EditableTemplate cuando cambio ContentTemplate al hacer clic en el botón? – Jehof

+0

Estoy atascado con el paso N 5 .. Aquí está mi código http://stackoverflow.com/questions/28613473/click-to-edit-control-lostfocus-event-issue –

Cuestiones relacionadas