Here's how to get the full text with obvious line breaks.
Note:
- Include the following classes from the Advanced text formatting format in your project:
- CustomTextSource
- Fontrendering
- GenericTextProperties
- There are some limitations mentioned in the CustomTextSource class. However, I believe that your requirements are not affected by these restrictions.
- These are just examples. You can change the code to suit your needs.
- The code still uses a hack (albeit a decent one) -
InputTextBox.ViewportWidth . You might want to check if the end result is what you want.
See: Advanced Text Formatting and Text Formatting Example
Code example
XAML:
<Window x:Class="TextFormatterForWrappedText.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> <TextBox Width="200" x:Name="InputTextBox" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Margin="23,12,280,241" /> <TextBox x:Name="FormattedDisplayTextBox" Height="172" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="23,105,0,0" Width="438" AcceptsReturn="True" TextWrapping="Wrap" /> <Button HorizontalAlignment="Left" VerticalAlignment="Top" Margin="257,12,0,0" Height="23" Content="Copy" Name="CopyButton" Width="129" Click="CopyButton_Click" /> </Grid> </Window>
Codebehind:
private void CopyButton_Click(object sender, RoutedEventArgs e) { List<string> stringList = GetTextAsStringList(); StringBuilder sb = new StringBuilder(); foreach (string s in stringList) { sb.Append(s); sb.Append("\r\n"); } Clipboard.SetData(System.Windows.DataFormats.Text, sb.ToString()); FormattedDisplayTextBox.Clear(); FormattedDisplayTextBox.Text = sb.ToString(); } private List<string> GetTextAsStringList() { List<string> stringList = new List<string>(); int pos = 0; string inputText = InputTextBox.Text; CustomTextSource store = new CustomTextSource(); store.Text = inputText; store.FontRendering = new FontRendering(InputTextBox.FontSize, InputTextBox.TextAlignment, null, InputTextBox.Foreground, new Typeface(InputTextBox.FontFamily, InputTextBox.FontStyle, InputTextBox.FontWeight, InputTextBox.FontStretch)); using (TextFormatter formatter = TextFormatter.Create()) { while (pos < store.Text.Length) { using (TextLine line = formatter.FormatLine(store, pos, InputTextBox.ViewportWidth, new GenericTextParagraphProperties( store.FontRendering), null)) { stringList.Add(inputText.Substring(pos, line.Length - 1)); pos += line.Length; } } } return stringList; }
publicgk
source share