私のアプリケーションでは、ユーザーは 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 つ目を拡張します。を動的に追加するParagraph
とFlowDocument
、「ビッグ」スタイルが選択されます。ただし、暗黙的なスタイルの赤の前景色を選択しないという注意点があります。どうすれば両方を拾うことができますか?
これは、XAML を解析するときにのみ問題になるようです。新しいParagraph
オブジェクトをインスタンス化して に追加すると、FlowDocument
実際に両方のスタイルが選択されます。