Перейти Отредактировано
Поскольку свойство Xaml RichTextbox не является свойством зависимости, я создал настраиваемый RichTextbox, где я могу взаимодействовать с его свойством xaml:
<local:RichTextUserControl RtfXaml="{Binding Path=Text, Converter={StaticResource RichTextBoxContentConverter}}" />
и я связываю следующий текст со свойством xaml, и он работает нормально:
<Section xml:space=\"preserve\" HasTrailingParagraphBreakOnPaste=\"False\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">
<Paragraph FontSize=\"20\" FontFamily=\"Segoe WP\" Foreground=\"#FFFFFFFF\" FontWeight=\"Normal\" FontStyle=\"Normal\" FontStretch=\"Normal\" TextAlignment=\"Left\">
<Run Text=\"Some text without formatting\" />
<Italic>Some italic text</Italic>
<Underline>I am UnderLined</Underline>
</Paragraph>
</Section>
Я связываюсь с ним через конвертер, где я ищу смайлики (например, :);): D и так далее ...) и заменяя их изображениями, и если я вставляю следующий код где-то между текстом абзаца, он вылетает:
<InlineUIContainer>
<Image Source="ApplicationIcon.png"/>
</InlineUIContainer>
(Это исключение только в том случае, еслипереплет)
Отредактировано :
Итак, я обнаружил, что это плохой подход, и я начал реализовывать его следующим образом:
<RichTextBox Tag="{Binding Path=MessageText}" TextWrapping="Wrap" Loaded="loaded"/>
private void loaded(object sender, RoutedEventArgs e)
{
var richTextBox= sender as RichTextBox;
Object o = XamlReader.Load(string.Format(XamlTemplate, richTextBox.Tag.ToString()));
var section = o as Section;
if (section != null)
{
richTextBox.Blocks.Clear();
var tempBlocks = section.Blocks.ToList();
section.Blocks.Clear();
foreach (Block block in tempBlocks)
richTextBox.Blocks.Add(block);
}
private const string XamlTemplate = "<Section xml:space=\"preserve\" HasTrailingParagraphBreakOnPaste=\"False\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Paragraph FontSize=\"20\" FontFamily=\"Segoe WP\" Foreground=\"#FFFFFFFF\" FontWeight=\"Normal\" FontStyle=\"Normal\" FontStretch=\"Normal\" TextAlignment=\"Left\"><Run Text=\"{0}\" /><Image Source=\"ApplicationIcon.png\" Width=\"15\" Height=\"15\"/></InlineUIContainer> </Paragraph></Section>";
Поэтому я анализирую Xaml для загруженного события текстовых полей, с текстом и строкой.XamlTemplate - это жестко закодированный текст с шаблоном смайлика.
Мой смайлик работает таким образом, но когда я прокручиваю вниз в своем списке, где есть номера этих Richtextbox, прокрутка начинает прыгать, и это действительно раздражает.
Но когда я изменяю элементы списка на фиксированный размер, он работает нормально, но мне нужно динамически менять размеры элементов, есть идеи?