Свяжите текст RichTextBox из Xaml

Как привязать текст RichTextArea к xaml


person user281947    schedule 02.03.2010    source источник


Ответы (6)


Для этого нет встроенного способа. Вы можете создать свойство с прикрепленным текстом и привязать к нему, как обсуждалось здесь

person Arsen Mkrtchyan    schedule 02.03.2010
comment
Приведенная ссылка относится к WPF. RichTextBox в Silverlight не имеет свойства Document. - person Steve Wortham; 05.09.2010
comment
Я хотел бы поддержать комментарий Стива. - person ghost_mv; 07.03.2012

Здесь есть более простой ответ:

Silverlight 4 RichTextBox связывает данные с помощью DataContext, и это работает как шарм.

<RichTextBox>
  <Paragraph>
    <Run Text="{Binding Path=LineFormatted}" />
  </Paragraph>
</RichTextBox>
person m1m1k    schedule 01.02.2013
comment
Это также отлично работает в Windows 8 / 8.1 XAML. Спасибо!! - person dex3703; 31.01.2014
comment
Простое, но эффективное решение, Блестяще - person DNKROZ; 28.02.2014
comment
Как сказал @ dex3703, это работает в WPF с синтаксисом: <RichTextBox> <FlowDocument> <Paragraph> <Run Text="{Binding Path=MyText}" /> </Paragraph> </FlowDocument> </RichTextBox> - person maxp; 18.03.2015
comment
Просто к сведению для других ... это не удастся, если пользователь выполнит SelectAll и Delete, поскольку этот элемент абзаца будет удален. - person Bill Tarbell; 20.10.2017

Вот решение, которое я придумал. Я создал собственный класс RichTextViewer и унаследовал его от RichTextBox.

using System.Windows.Documents;
using System.Windows.Markup;
using System.Windows.Media;

namespace System.Windows.Controls
{
    public class RichTextViewer : RichTextBox
    {
        public const string RichTextPropertyName = "RichText";

        public static readonly DependencyProperty RichTextProperty =
            DependencyProperty.Register(RichTextPropertyName,
                                        typeof (string),
                                        typeof (RichTextBox),
                                        new PropertyMetadata(
                                            new PropertyChangedCallback
                                                (RichTextPropertyChanged)));

        public RichTextViewer()
        {
            IsReadOnly = true;
            Background = new SolidColorBrush {Opacity = 0};
            BorderThickness = new Thickness(0);
        }

        public string RichText
        {
            get { return (string) GetValue(RichTextProperty); }
            set { SetValue(RichTextProperty, value); }
        }

        private static void RichTextPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            ((RichTextBox) dependencyObject).Blocks.Add(
                XamlReader.Load((string) dependencyPropertyChangedEventArgs.NewValue) as Paragraph);

        }
    }
}
person e-rock    schedule 28.10.2011


Этого сделать нельзя, придется вручную обновить. Документ не является DependencyProperty.

person Ana Betts    schedule 02.03.2010