1

在我的应用程序中,用户可以输入 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,它确实会同时采用两种样式。

4

0 回答 0