我如何指定,例如FlowDocument中表内的所有段落标记(不包括表外的那些)。我期待这样的事情:
<Style TargetType="Table">
<Style TargetType="Paragraph">
<Setter Property="Margin" Value="0" />
<Style>
</Style>
但是不允许嵌套样式。
我希望在CSS中实现的内容类似于:
Table Paragraph {margin:0}
因此,表格范围内的所有段落标记的边距都为0.这是否可以在WPF中(在XAML标记部分中)?复杂的WPF样式选择器的任何好的来源也将受到赞赏。
我可以编写代码来完成它,但这不是我想要的。
答案 0 :(得分:10)
实际上可以通过创建样式然后在Style.Resources属性中包含一个或多个样式来执行类似于CSS的样式嵌套,如下所示:
<Style TargetType="Table">
<Style.Resources>
<Style TargetType="Paragraph">
<Setter Property="Padding" Value="0" />
</Style>
</Style.Resources>
</Style>
此样式将应用于范围内的所有表,嵌套的段落样式将应用于这些表中的所有段落 ,但不应用于表外的段落。这是因为将内容放在Resources属性中基本上将它们注入到所有子对象的可见范围内。
你也可以在技术上做这样的多层嵌套,为仅在Paragraphs里面的Hyperlinks green上色,这只是在Tables中:
<Style TargetType="Table">
<Style.Resources>
<Style TargetType="Paragraph">
<Setter Property="Padding" Value="0" />
<Style.Resources>
<Style TargetType="Hyperlink">
<Setter Property="Foreground" Value="Green" />
</Style>
</Style.Resources>
</Style>
</Style.Resources>
</Style>
答案 1 :(得分:3)
不幸的是,WPF不像CSS那样工作。你仍然可以得到你想要的效果,但不是那么简单。您需要为Style
命名并将其应用于您想要手动影响的Paragraph
元素:
<Style x:Key="NoSPaceParagraph" TargetType="Paragraph">
<Setter Property="Margin" Value="0" />
</Style>
...
<Paragraph Style="{StaticResource NoSPaceParagraph}">
....
</Paragraph>