在我的应用程序中,用户可以输入 HTML,然后将其转换为 XAML。然后我使用该方法解析 XAMLXamlReader.Parse并将其添加到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);
请注意,该段落具有指定的样式。该样式在FlowDocument's 资源中定义。
<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>
你可以看到我定义了两种样式。第一个是隐式样式,第二个使用BasedOn属性扩展第一个。当我动态添加它Paragraph时,FlowDocument它确实选择了“大”风格。但是,有一个警告,它不会拾取隐式样式的红色前景色。我怎样才能让它同时拾取?
当我解析 XAML 时,这似乎只是一个问题。如果我只是实例化一个新Paragraph对象并将其添加到 中FlowDocument,它确实会同时采用两种样式。