Articles in this section
Category / Section

How to implement RtfText property for WPF RichTextBoxAdv control?

2 mins read

You can bind RTF text with the SfRichTextBoxAdv content by implementing an extension class with the RtfText property.


Please refer to 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 RTF text.
    /// </summary>
    public string RtfText
    {
        get
        {
            return (string)GetValue(RtfTextProperty);
        }
        set
        {
            SetValue(RtfTextProperty, value);
        }
    }
    #endregion
 
    #region Constructor
    /// <summary>
    /// Initializes the instance of the SfRichTextBoxAdvExtension class.
    /// </summary>
    public SfRichTextBoxAdvExtension()
    {
        // Wires the ContentChanged event.
        this.ContentChanged += RTE_ContentChanged;
    }
    #endregion
 
#region Static Dependency Properties
    /// <summary>
    /// Using this as a backing store for the RtfText dependency property to enable styling, animation, etc.
    /// </summary>
    public static readonly DependencyProperty RtfTextProperty = DependencyProperty.Register("RtfText", typeof(string), typeof(SfRichTextBoxAdvExtension), new PropertyMetadata(string.Empty, new PropertyChangedCallback(OnRtfTextChanged)));
    #endregion       #region Static Events     /// <summary>     /// Called when the RTF text changes.     /// </summary>     /// <param name="obj"></param>     /// <param name="e"></param>     private static void OnRtfTextChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)     {         SfRichTextBoxAdvExtension richTextBox = (SfRichTextBoxAdvExtension)obj;         //Update the document with the RTF.         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 the RtfText property.             skipUpdating = true;             Stream stream = new MemoryStream();             // Saves the document as an Rtf Stream.             this.Save(stream, FormatType.Rtf);             stream.Position = 0;             // Reads the stream and assigns the string to the RtfText property             using (StreamReader reader = new StreamReader(stream))             {                 this.RtfText = reader.ReadToEnd();             }             skipUpdating = false;         }     }     #endregion       #region Implementation     /// <summary>     /// Updates the document.     /// </summary>     /// <param name="rtfText">The Rtf text.</param>     private void UpdateDocument(string rtfText)     {         // If the Rtf text property is set internally, skip updating the document.         if (!skipUpdating && !string.IsNullOrEmpty(rtfText))         {             Stream stream = new MemoryStream();             // Convert the Rtf string to byte array.             byte[] bytes = Encoding.UTF8.GetBytes(rtfText);             // Writes the byte array to stream.             stream.Write(bytes, 0, bytes.Length);             stream.Position = 0;             //Load the Rtf stream.             Load(stream, FormatType.Rtf);         }     }     /// <summary>     /// Disposes of the instance.     /// </summary>     public void Dispose()     {         this.ContentChanged -= RTE_ContentChanged;         ClearValue(RtfTextProperty);         base.Dispose();     }     #endregion }

 

XAML

<local:SfRichTextBoxAdvExtension x:Name="richTextBoxAdv" Grid.Row="2" RtfText="{Binding RtfText, Mode=TwoWay}" LayoutType="Continuous" EnableMiniToolBar="False" FontFamily="Arial" FontSize="12" DocumentTitle="Note 1"/>

 

 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please  to leave a comment
Access denied
Access denied