Se você nunca ouviu falar no controle RichTextBox, leia este artigo.
O RichTextBox é um controle sofisticado e altamente funcional
concebido para permitir a visualização e para editar objetos FlowDocument.
A combinação do RichTextBox e de objetos FlowDocument fornece
ao usuário o acesso a recursos avançados de edição de
documentos que não existem em um controle TextBox. Esses recursos
incluem a formatação de texto misto, hifenização,
tabelas, listas, parágrafos e imagens embutidas.
Para
preencher o conteúdo de um RichTextBox estaticamente, você
inclui um elemento FlowDocument como o conteúdo
da declaração XAML RichTextBox. Dentro do elemento
FlowDocument, você pode definir conteúdo formatado usando
elementos do modelo de conteúdo de fluxo de documentos. Os principais elementos estruturais da presentes no modelo de
conteúdo incluem a Figure, Hyperlink,List, ListItem,
Paragraph, Section e Table.
Para
preencher o RichTextBox no código, você deve trabalhar com um
objeto FlowDocument diretamente. Você pode ou criar um novo
objeto FlowDocument ou obter um já existente um RichTextBox
através da propriedade RichTextBox.Document.
Você
manipula o conteúdo do FlowDocument selecionando partes do seu
conteúdo usando um objeto System.Windows.Documents.TextSelection. O objeto TextSelection
contém duas propriedades, Start e End, que
identificam as posições inicial e final do conteúdo
FlowDocument que você quer manipular. Uma vez que você tenha um
objeto TextSelection adequado, você pode manipular seu conteúdo
com o os membros TextSelection.
Para
simplificar a manipulação de objetos FlowDocument, o
RichTextBox suporta comandos padrão definidos pelas classes ApplicationCommands
e EditingCommands a partir do System.Windows.Input.
O RichTextBox também suporta padrão combinações de teclas
para executar operações básicas de formatação de texto, tais
como negrito, itálico, sublinhado e formatos de texto,
bem como cortar, copiar e colar o conteúdo selecionado.
No exemplo a seguir, temos um RichTextBox usado
para editar um FlowDocument, onde o XAML define
um FlowDocument estático que contém uma variedade de elementos
estruturais e de formatação. A interface com o usuário fornece
um conjunto de botões para manipular o conteúdo de RichTextBox.
Os botões são usados na aplicação para dar suporte aos
recursos de edição do RichTextBox e também para usar estilos
aplicados a partir dos mesmos diretamente no controle.
Abra o Visual C# 2010 Express Edition e crie uma nova aplicação do tipo WPF
Application com o nome EditorWPF2.

Em seguida, vamos definir a
interface do usuário usando o controle RichTextBox
com algum texto estático e botões de comando conforme leiaute
abaixo:

O código XAML usado para
gerar a interface é dado a seguir:
<Window x:Class="Editor_WPF2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DockPanel>
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<StackPanel.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="CommandTarget"
Value="{Binding ElementName=rtbTextBox1}" />
</Style>
</StackPanel.Resources>
<Button Content="Clear" Name="btnClear" Click="btnClear_Click" />
<Separator Margin="5"/>
<Button Content="Cu_t" Command="ApplicationCommands.Cut" />
<Button Content="_Copy" Command="ApplicationCommands.Copy" />
<Button Content="_Paste" Command="ApplicationCommands.Paste" />
<Separator Margin="5"/>
<Button Content="_Undo" Command="ApplicationCommands.Undo" />
<Button Content="_Redo" Command="ApplicationCommands.Redo" />
<Separator Margin="5"/>
<Button Content="_Bold" Command="EditingCommands.ToggleBold" />
<Button Content="_Italic" Command="EditingCommands.ToggleItalic" />
<Button Content="Underline"
Command="EditingCommands.ToggleUnderline" />
<Separator Margin="5"/>
<Button Content="_Right" Command="EditingCommands.AlignRight" />
<Button Content="C_enter" Command="EditingCommands.AlignCenter" />
<Button Content="_Left" Command="EditingCommands.AlignLeft" />
</StackPanel>
<RichTextBox DockPanel.Dock="Bottom" Name="rtbTextBox1"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Visible">
<FlowDocument>
<Paragraph FontSize="12">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat.
</Paragraph>
<Paragraph FontSize="15">
Ut wisi enim ad minim veniam, quis nostrud exerci tation
ullamcorper suscipit lobortis nisl ut aliquip ex ea
commodo consequat. Duis autem vel eum iriure.
</Paragraph>
<Paragraph FontSize="18">Uma Lista</Paragraph>
<List>
<ListItem>
<Paragraph>
<Bold>Item - Negrito</Bold>
</Paragraph>
</ListItem>
<ListItem>
<Paragraph>
<Italic>Item - Itálico</Italic>
</Paragraph>
</ListItem>
<ListItem>
<Paragraph>
<Underline>Item - Sublinhado</Underline>
</Paragraph>
</ListItem>
</List>
</FlowDocument>
</RichTextBox>
</DockPanel>
</Grid>
</Window>
Os botões de comando
usados já realizam as tarefas diretamente no controle
RichTextBox, vamos apenas definir o código para o evento Click
do botão Clear no code-behind do arquivo MainWindow.xaml.cs
conforme abaixo:
private void btnClear_Click(object sender, RoutedEventArgs e)
{
// Seleciona todo o texto no FlowDocument e recorta-o
rtbTextBox1.SelectAll();
rtbTextBox1.Cut();
}
Agora é só alegria…
Rode o projeto e divirta-se
com os recursos do RichTextBox da WPF:

Fica a seu critério
expandir os recursos usados no projeto.
Pegue o projeto completo
aqui: Editor_WPF2.zip
Simples , simples assim…
Eu sei, é apenas WPF , mas
eu gosto…








