在Metro Style App中使用FlipView中的RichTextBlock

时间:2012-09-26 11:00:29

标签: c# xaml windows-8 microsoft-metro

我正在使用标准的Visual Studio模板,并且我有一个ItemsDetailPage,其中包含一个在其DataTemplate中带有RichTextBlock的FlipView。

我想将RichTextBlock块设置为我在文本中生成的自定义段落。我认为没有办法在XAML中绑定RichTextBlocks Block,所以我使用的是代码。在RichTextBlock的Loaded事件中,我设置了它的Block,它运行正常。但问题是,当页面显示时,Loaded事件只被调用一次。当我“翻转”到另一个项目时,FlipView的所选项目会发生变化,但不会再次调用Loaded事件(我认为这没问题)。

我尝试在FlipViews SelectionChanged项目中设置RichTextBlock,但这不起作用。

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调用我自己的代码(seleced item change)?

1 个答案:

答案 0 :(得分: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>