5

標準の Visual Studio テンプレートを使用しており、DataTemplate に RichTextBlock を持つ FlipView を含む ItemsDetailPage があります。

テキストで生成されたカスタム パラグラフに RichTextBlock ブロックを設定したいと考えています。XAML で RichTextBlocks ブロックをバインドする方法はないと思うので、分離コードを使用しています。RichTextBlock の Loaded イベントで、そのブロックを設定しました。これで問題なく動作します。しかし問題は、ページが表示されたときに Loaded イベントが 1 回しか呼び出されないことです。別のアイテムに「フリップ」すると、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 で呼び出される独自のコードを取得するにはどうすればよいですか?

4

1 に答える 1

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>
于 2012-10-01T16:51:30.950 に答える