In generally, we are defining RichEditText at a XAML file like following:
<Page
x:Class="RTFTestApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:RTFTestApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Loaded="Page_Loaded"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid x:Name="grid">
<RichEditBox x:Name="richEditBox" />
</Grid>
</Page>
In this case, we can set RTF everywhere:
using Windows.UI.Text;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace RTFTestApp
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
var rtf = @"{\rtf1\ansi\ansicpg932\deff0\nouicompat\deflang1033\deflangfe1041{\fonttbl{\f0\fnil\fcharset0 Matura MT Script Capitals;}{\f1\fnil\fcharset128 \'82\'6c\'82\'72 \'96\'be\'92\'a9;}}
{\colortbl ;\red255\green0\blue0;}
{\*\generator Riched20 10.0.18362}\viewkind4\uc1
\pard\sa200\sl276\slmult1\f0\fs22\lang17 This is a \cf1\fs40 sample \cf0\fs22 RTF\f1\par
}";
richEditBox.Document.SetText(TextSetOptions.FormatRtf, rtf);
}
}
}
A result of above code is as below:
It works fine. However, if creating RichEditBox in C# code, sometime it doesn't work.
For example, removing the RichEditBox tag from the XAML file, and editing Loaded event handler like below:
using Windows.UI.Text;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace RTFTestApp
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
var richEditBox = new RichEditBox();
grid.Children.Add(richEditBox);
var rtf = @"{\rtf1\ansi\ansicpg932\deff0\nouicompat\deflang1033\deflangfe1041{\fonttbl{\f0\fnil\fcharset0 Matura MT Script Capitals;}{\f1\fnil\fcharset128 \'82\'6c\'82\'72 \'96\'be\'92\'a9;}}
{\colortbl ;\red255\green0\blue0;}
{\*\generator Riched20 10.0.18362}\viewkind4\uc1
\pard\sa200\sl276\slmult1\f0\fs22\lang17 This is a \cf1\fs40 sample \cf0\fs22 RTF\f1\par
}";
richEditBox.Document.SetText(TextSetOptions.FormatRtf, rtf);
}
}
}
It is just changed to create RichEditBox on C# code. It doesn't work correctly. Font doesn't set.
The issue is fixed just calling UpdateLayout method before call SetText.
using Windows.UI.Text;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace RTFTestApp
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
var richEditBox = new RichEditBox();
grid.Children.Add(richEditBox);
grid.UpdateLayout(); // add this line before call SetText.
var rtf = @"{\rtf1\ansi\ansicpg932\deff0\nouicompat\deflang1033\deflangfe1041{\fonttbl{\f0\fnil\fcharset0 Matura MT Script Capitals;}{\f1\fnil\fcharset128 \'82\'6c\'82\'72 \'96\'be\'92\'a9;}}
{\colortbl ;\red255\green0\blue0;}
{\*\generator Riched20 10.0.18362}\viewkind4\uc1
\pard\sa200\sl276\slmult1\f0\fs22\lang17 This is a \cf1\fs40 sample \cf0\fs22 RTF\f1\par
}";
richEditBox.Document.SetText(TextSetOptions.FormatRtf, rtf);
}
}
}
The result is as below:
This issue is usually occurred when implements printing feature. Because sometimes, controls are created in C# code for print preview and printing.
I hope this article will help someone.
Happy coding!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.