我正在尝试设置FlowDocument的样式,使其行为与在MS Word中输入文本时的行为相同。现在,我在listitem中遇到段落边距。我让它看起来就像我想要的那样:
使用此XAML:
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<FlowDocument.Resources>
<Style TargetType="Paragraph">
<Setter Property="Margin" Value="0,0,0,20" />
<Style.Triggers>
<DataTrigger Binding="{Binding Margin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListItem}, AncestorLevel=1}}" Value="0">
<Setter Property="Margin" Value="5" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type List}">
<Setter Property="Margin" Value="5" />
</Style>
</FlowDocument.Resources>
<List>
<ListItem>
<Paragraph>Bullet1</Paragraph>
</ListItem>
<ListItem>
<Paragraph>Bullet2</Paragraph>
<List>
<ListItem>
<Paragraph>Bullet2.1</Paragraph>
<List>
<ListItem>
<Paragraph>Punkt 2.1.1</Paragraph>
</ListItem>
</List>
</ListItem>
</List>
</ListItem>
</List>
<Paragraph>Regular paragraph 1</Paragraph>
<Paragraph>Regular paragraph 2</Paragraph>
</FlowDocument>
我现在的问题是我还需要能够将FlowDocument转换为RTF并使其看起来很好。转换为RTF时,似乎忽略了样式触发器。
我使用此方法转换为RTF: How to convert FlowDocument to rtf
我的问题是: 有没有其他方法可以为常规段落设置不同的页边距,并为listitem的子句设置段落?我需要使用常规样式来解决这个问题,而不是直接在段落上设置样式或边距属性。
答案 0 :(得分:2)
我发现自己有办法做到这一点。 这是更新的FlowDocument.Resources部分:
<Style TargetType="Paragraph">
<Setter Property="Margin" Value="0,0,0,20" />
</Style>
<Style TargetType="ListItem">
<Style.Resources>
<Style TargetType="Paragraph">
<Setter Property="Margin" Value="0,0,0,5" />
</Style>
</Style.Resources>
</Style>
<Style TargetType="{x:Type List}">
<Setter Property="Margin" Value="5" />
</Style>
这正是我想要做的第一件事。现在,ListItem中的段落的样式与FlowDocument中的常规段落不同。
答案 1 :(得分:0)
FlowDocument是一个“实时”文档。你可以与它互动。 RTF不是,它是静态表示文件格式。 将文本范围保存到rtf时,您基本上会在触发器发生之前获得控件内部状态的快照。 也就是说,你可以尝试定义一个新的类ListParagraph来派生drom Paragraph并将样式应用到你的新ListParagraph,就像你应用于Paragraph一样。 这样做的代价是你需要在导出到RTF之前通过代码(而不是Paragraphs)创建ListParagraphs或者用内存中的ListParagraph替换Paragraph。