我正在使用标准的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/