1

私のアプリケーションでは、ユーザーは HTML を入力でき、それが XAML に変換されます。XamlReader.Parse次に、メソッドを使用して XAML を解析し、 FlowDocument.

たとえば、段落の XAML が文字列に格納されているとします。次に、それを解析して次のFlowDocumentように追加します。

var xaml = @"<Paragraph Style=""{DynamicResource Big}"" xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">My paragraph</Paragraph>";
var paragraph = (Paragraph)XamlReader.Parse(xaml);
MyDocument.Blocks.Add(paragraph);

段落に Style が指定されていることに注意してください。そのスタイルはFlowDocumentのリソースで定義されています。

<RichTextBox>
    <FlowDocument x:Name="MyDocument">
        <FlowDocument.Resources>
            <Style TargetType="{x:Type Paragraph}">
                <Setter Property="Foreground"
                        Value="Red" />
            </Style>

            <Style TargetType="{x:Type Paragraph}"
                   BasedOn="{StaticResource {x:Type Paragraph}}"
                   x:Key="Big">
                <Setter Property="FontSize"
                        Value="24" />
            </Style>
        </FlowDocument.Resources>
    </FlowDocument>
</RichTextBox>

2 つのスタイルを定義したことがわかります。1 つ目は暗黙的なスタイルで、2 つ目はBasedOn属性を使用して 1 つ目を拡張します。を動的に追加するParagraphFlowDocument、「ビッグ」スタイルが選択されます。ただし、暗黙的なスタイルの赤の前景色を選択しないという注意点があります。どうすれば両方を拾うことができますか?

これは、XAML を解析するときにのみ問題になるようです。新しいParagraphオブジェクトをインスタンス化して に追加すると、FlowDocument実際に両方のスタイルが選択されます。

4

0 に答える 0