Category / Section
How to implement Text property for RichTextBox control in WinRT?
2 mins read
You can bind text with SfRichTextBoxAdv content by implementing an extension class with Text property.
Please refer the following code samples.
C#
/// <summary> /// Represents the extension class for SfRichTextBoxAdv. /// </summary> public class SfRichTextBoxAdvExtension : SfRichTextBoxAdv { #region Fields bool skipUpdating = false; #endregion #region Properties /// <summary> /// Gets or Sets the text. /// </summary> public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } #endregion #region Constructor /// <summary> /// Initializes the instance of SfRichTextBoxAdvExtension class. /// </summary> public SfRichTextBoxAdvExtension() { // Wires the ContentChanged event. this.ContentChanged += RTE_ContentChanged; } #endregion #region Static Dependency Properties /// <summary> /// Using as a backing store for Text dependency property to enable styling, animation etc. /// </summary> public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(SfRichTextBoxAdvExtension), new PropertyMetadata(string.Empty, new PropertyChangedCallback(OnTextChanged))); #endregion #region Static Events /// <summary> /// Called when text changed. /// </summary> /// <param name="obj"></param> /// <param name="e"></param> private static void OnTextChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { SfRichTextBoxAdvExtension richTextBox = (SfRichTextBoxAdvExtension)obj; //Update the document with the text. richTextBox.UpdateDocument((string)e.NewValue); } #endregion #region Events /// <summary> /// Called when content changes in SfRichTextBoxAdv. /// </summary> /// <param name="obj"></param> /// <param name="args"></param> void RTE_ContentChanged(object obj, ContentChangedEventArgs args) { if (this.Document != null) { // To skip internal updation of document on setting Text property. skipUpdating = true; Stream stream = new MemoryStream(); // Saves the document as text Stream. this.Save(stream, FormatType.Txt); stream.Position = 0; // Reads the stream and assigned the string to Text property using (StreamReader reader = new StreamReader(stream)) { this.Text = reader.ReadToEnd(); } skipUpdating = false; } } #endregion #region Implementation /// <summary> /// Updates the document. /// </summary> /// <param name="text">The text.</param> private void UpdateDocument(string text) { // If text property is set internally means, skip updating the document. if (!skipUpdating && !string.IsNullOrEmpty(text)) { Stream stream = new MemoryStream(); // Convert the text string to byte array. byte[] bytes = Encoding.UTF8.GetBytes(text); // Writes the byte array to stream. stream.Write(bytes, 0, bytes.Length); stream.Position = 0; //Load the Text stream. Load(stream, FormatType.Txt); } } /// <summary> /// Disposes the instance. /// </summary> public void Dispose() { this.ContentChanged -= RTE_ContentChanged; ClearValue(TextProperty); base.Dispose(); } #endregion }
XAML
<local:SfRichTextBoxAdvExtension x:Name="richTextBoxAdv" Grid.Row="2" Text="{Binding Text, Mode=TwoWay}" LayoutType="Continuous" EnableMiniToolBar="False" FontFamily="Arial" FontSize="12" DocumentTitle="Note 1"/>