在Metro Style App中使用FlipView中的RichTextBlock

Igo*_*man 5 c# xaml microsoft-metro windows-8

我正在使用标准的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);               
        }
Run Code Online (Sandbox Code Playgroud)

调用SetRichContent,设置RichTextBlocks块,但在视觉上它们不会改变,并且在几次翻转后,整个应用程序崩溃而没有任何其他信息.

所以我的问题是,如何通过每次翻转(选择项目更改)在RichTextBlock上调用我自己的代码?

小智 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>
Run Code Online (Sandbox Code Playgroud)