Использование RichTextBlock в FlipView в приложении Metro Style

Я использую стандартные шаблоны Visual Studio, и у меня есть ItemsDetailPage, который содержит FlipView с RichTextBlock в своем DataTemplate.

Я хочу установить блок RichTextBlock в мои пользовательские абзацы, сгенерированные в тексте. Я думаю, что нет способа связать блок RichTextBlocks в XAML, поэтому я использую код позади. В событии Loaded RichTextBlock я устанавливаю его блок, который работает нормально. Но проблема в том, что событие Loaded вызывается только один раз при отображении страницы. Когда я «переворачиваю» на другой элемент, выбранный элемент FlipView изменяется, но событие Loaded больше не вызывается (я думаю, это нормально).

Я попытался установить RichTextBlock в элементе FlipViews SelectionChanged, но это не сработало.

var ind = this.flipView.SelectedIndex;

        var flipViewItem = this.flipView.ItemContainerGenerator.ContainerFromIndex(flipView.SelectedIndex);

        if (flipViewItem != null)
        {               
            var scroller = FindFirstElementInVisualTree<ScrollViewer>(flipViewItem);
            var tb = scroller.FindDescendantByName("richTextColumns").FindDescendantByName("richTextBlock") as RichTextBlock;
            SetRichContent(tb, (flipView.SelectedItem as ArticleViewModel).HtmlContent);               
        }

Вызывается SetRichContent, устанавливаются блоки RichTextBlocks, но визуально они не меняются, и после нескольких перелистываний все приложение вылетает без какой-либо дополнительной информации.

Итак, мой вопрос: как мне получить свой собственный код, вызываемый в RichTextBlock при каждом переворачивании (изменении выбранного элемента)?


person Igor Kulman    schedule 26.09.2012    source источник


Ответы (1)


Вы можете привязать форматированные текстовые поля. Убедитесь, что ваш контекст данных установлен правильно. Нам нужно увидеть больше кода, чтобы дать правильный ответ.

<RichTextColumns>
     <RichTextColumns.ColumnTemplate>
         <DataTemplate>
             <RichTextBlockOverflow Width="400" Margin="50,0,0,0"/>
         </DataTemplate>
    </RichTextColumns.ColumnTemplate>

     <RichTextBlock Width="400">
         <Paragraph>
             <Run Text="{Binding Content}"/>
         </Paragraph>
     </RichTextBlock>
</RichTextColumns>
person Dreambeats    schedule 01.10.2012
comment
Это привязывает весь контент к одному запуску, как в шаблоне в VS. Мне нужно связать несколько абзацев и запустить - person Igor Kulman; 01.10.2012
comment
Попробуйте использовать несколько прогонов для каждого абзаца, который вам нужен. - person Dreambeats; 04.10.2012
comment
вопрос в том, как получить доступ к RichTextBlock в DataTemplate ведьмы SelectedItem изменить, а не как добавить Runs в RichTextBlock, что тривиально - person Igor Kulman; 05.10.2012