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

我想将RichTextBlock块设置为以文本生成的自定义段落。我认为无法在XAML中绑定(bind)RichTextBlocks块,因此我在后面使用代码。在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上调用我自己的代码?

最佳答案

您可以绑定(bind)富文本框。确保您的数据上下文设置正确。我们需要查看更多代码才能做出适当的回答。

<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>

关于c# - 在Metro Style应用程序的FlipView中使用RichTextBlock,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12600224/

10-13 03:13