Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/02/2015, 20:38
agleiva
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 3 meses
Puntos: 52
Respuesta: Usando richTextBox del WPF

Hola.

En primer lugar, en WPF no se "pone" nada, sino que se declara la UI en XAML y despues se usa DataBinding para popularla con datos.

Me refiero a que no se "pone" nada porque la UI no es un lugar para "poner" datos, si no para mostrarlos. Hay una diferencia conceptual muy importante aquí.

Con respecto a esto, te sugiero que leas los siguientes links:

XAML: https://msdn.microsoft.com/en-us/library/ms752059(v=vs.110).aspx
DataBinding: https://msdn.microsoft.com/en-us/library/ms752347(v=vs.110).aspx

Te menciono esto porque la mentalidad y la metodologia que se usan en WPF y en XAML en general (Windows Phone, Windows Runtime, Silverlight, Xamarin.Forms) es completamente diferente a la forma casera, primitiva, burda, poco profesional de poner todo junto en cualquier lado a la que se acostumbra en tecnologias primitivas e inferiores como Windows Forms o "swing" de java.

En WPF, la UI es la UI, y se declara en XAML, y los datos son datos, y se ponen totalmente aparte de la UI en lo que se llama un Model (modelo de negocio de tu aplicacion) o un ViewModel (modelo que representa el estado y las acciones de la UI de manera abstracta).

Con respecto a esto, te sugiero que busques y leas acerca del patrón MVVM, o Model-View-ViewModel, también conocido con su original nombre Presentation Model, termino acuñado nada menos que por Martin Fowler.

-----------------------------------------------------------------------------------------

Al grano con tu pregunta, el RichTextBox de WPF esta basado en el Document Model, una API de WPF que permite la creación de documentos enriquecidos y su posterior visualización en forma de documentos fidedignos (FixedDocument) o documentos fluidos (FlowDocument) que se adaptan a la pantalla y permiten ajustar su contenido según la situación.

WPF Document API: https://msdn.microsoft.com/en-us/library/ms748388(v=vs.110).aspx

Debido a esto, el RichTextBox no es un simple "control de texto", si no que es un componente que funciona como un editor de FlowDocument, por lo tanto no existe la propiedad "Text", si no que existe la propiedad Document que es de tipo System.Windows.Documents.FlowDocument (https://msdn.microsoft.com/en-us/library/system.windows.documents.flowdocument(v=vs.110).as px)

El FlowDocument se compone de Blocks, y los Blocks se componen de Inlines, por lo tanto un ejemplo de como agregar texto a un RichTextBox de WPF de desde code behind seria algo asi:

Código C#:
Ver original
  1. var doc = new System.Windows.Documents.FlowDocument();
  2.     doc.Blocks.Add(new Paragraph(new Run("Text")));
  3.     richTextBox.Document = doc;

Como verás, la API a simple vista parece mucho más compleja que la API de windows forms (y lo es), y por lo tanto muchisimo mas amplia y con mas capacidades.

Dicho esto, casi nadie usa code behind y codigo procedimental para manipular la UI en WPF. Esto se considera una mala practica. En XAML se pueden declarar el contenido de un FlowDocument de una forma muy parecida a HTML, y luego levantarlo en runtime usando la URI del archivo .xaml:

Código XAML:
Ver original
  1. <RichTextBox Document="./MyProject/MyDocument.xaml"/>

Te sugiero que investigues mas acerca de estos temas y que no trates bajo ningun punto de vista de encarar WPF con una mentalidad de windows forms, ya que ambos son totalmente incompatibles, winforms es practicamente inservible mientras que WPF es un framework amplio y muy potente.

Última edición por agleiva; 27/02/2015 a las 20:47