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:
- crear una clase que hereda de ContentControl
- exponer una nuevas propiedades de dependencia de tipo DataTemplate: uno llamado EditableTemplate.
- Agregue un controlador de eventos MouseLeftButtonUp dentro de su OnApplyTemplate para escuchar el clic.
- Cambie la plantilla de contenido activo para que sea su EditableTemplate en el evento click.
- Cambia la plantilla cuando el control pierde el foco.
Ahora para utilizar el control personalizado en el interior TreeView:
- anular su ItemTemplate para su TreeView
- 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.
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