Silverlight 4 RichTextBox Привязка данных с использованием DataContext - PullRequest
2 голосов
/ 15 февраля 2010

Я работаю с Silverlight 4 и пытаюсь сделать мои тестовые приложения многоязычными, но у меня возникли некоторые проблемы, когда я попал в элемент управления RichTextBox. Я могу правильно связать его, выполнив обратный код (c #), но при попытке использовать атрибуты «DataContext» я не могу его загрузить вообще.

Я создал FormatConverter, который возвращает блок (абзац) для тестирования, и мой код, где у меня есть RichTextBox, выглядит следующим образом:

   <RichTextBox x:Name="rtaTest" BorderThickness="0" IsReadOnly="True" UseLayoutRounding="True" 
DataContext="{Binding Source={StaticResource Localization}, Path=Home.MainContent, Converter={StaticResource ParagraphFormatConverter}}">
    </RichTextBox>

Мне интересно, есть ли способ связывания RichTextBox из XAML.

Ответы [ 4 ]

5 голосов
/ 09 сентября 2010

Запуск , кажется, поддерживает привязку данных в SL4, как в:

<RichTextBox>
  <Paragraph>
    <Run Text="{Binding Path=LineFormatted}" />
  </Paragraph>
</RichTextBox>
1 голос
/ 26 мая 2010

Этот FillFromXml - вещь WPF? Не вижу этого в Silverlight.

1 голос
/ 16 февраля 2010

Я думаю, вы можете быть немного озадачены использованием DataContext. Например, у вас может быть форматированный текст, в котором некоторые дочерние элементы одного или нескольких элементов InlineUIContainer могут извлечь свой текст из свойства некоторого объекта. Вы бы присвоили объект DataContext.

Хотя я не совсем уверен, чего вы ожидали достичь, но я подозреваю, что вам действительно нужно, чтобы ваш конвертер действительно возвратил BlocksCollection (даже если он содержит только один Block, который вы первоначально возвращали ), а затем связать как: -

<RichTextArea x:Name="rtaTest" BorderThickness="0" IsReadOnly="True"
 UseLayoutRounding="True"
 Blocks="{Binding Source={StaticResource Localization},
   Path=Home.MainContent, Converter={StaticResource ParagraphFormatConverter}}" />
0 голосов
/ 06 апреля 2010

Блоки не могут быть установлены, они могут быть только выбраны.Один из способов установить блоки для RichTextArea -

public static void UpdateRichTextArea(RichTextArea area, string xmlText)
{
    if (area == null)
    return;

    area.Blocks.FillFromXml(xmlText, true);
}
...