我在代码中动态创建了一个FlowDocument。显示它后,我注意到,字体大小和系列与预定义的样式不匹配。
我窗口的Xaml包含显示FlowDocument的代码:
<FlowDocumentScrollViewer
Name="LeftFlowDocumentScrollViewer"
Height="200"
/>
背后的代码填写了文档:
var doc = new FlowDocument();
doc.Resources = new ResourceDictionary();
var bigTextStyle = new Style();
bigTextStyle.Setters.Add(new Setter(TextElement.ForegroundProperty, System.Windows.Media.Brushes.BlueViolet));
bigTextStyle.Setters.Add(new Setter(TextElement.FontWeightProperty, FontWeights.Normal));
bigTextStyle.Setters.Add(new Setter(TextElement.FontFamilyProperty, new System.Windows.Media.FontFamily("Arial")));
bigTextStyle.Setters.Add(new Setter(TextElement.FontSizeProperty, (Double)50));
doc.Resources.Add("BigText", bigTextStyle);
var p = new Paragraph();
doc.Blocks.Add(p);
p.Inlines.Add(new Run("Hello "));
var bigTextRun = new Run("Big text ");
bigTextRun.SetResourceReference(FrameworkElement.StyleProperty, "BigText");
p.Inlines.Add(bigTextRun);
LeftFlowDocumentScrollViewer.Document = doc;
正确应用字体颜色,表示样式应用于Run元素,但未指定字体大小和字体系列。为什么会发生这种情况以及如何使其发挥作用?似乎我的FlowDocument中的其他所有内容都能正常工作(段落,表格,带有绘图的画布......) 有趣的是,如果我序列化FlowDocument对象并反序列化它然后我显示它然后字体大小和系列是正确的!
以下是序列化流文档的外观 - 它看起来与代码中的定义完全相同:
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib">
<FlowDocument.Resources>
<Style TargetType="IFrameworkInputElement" x:Key="BigText">
<Style.Resources>
<ResourceDictionary />
</Style.Resources>
<Setter Property="TextElement.Foreground">
<Setter.Value>
<SolidColorBrush>#FF8A2BE2</SolidColorBrush>
</Setter.Value>
</Setter>
<Setter Property="TextElement.FontWeight">
<Setter.Value>
<FontWeight>Normal</FontWeight>
</Setter.Value>
</Setter>
<Setter Property="TextElement.FontFamily">
<Setter.Value>
<FontFamily>Arial</FontFamily>
</Setter.Value>
</Setter>
<Setter Property="TextElement.FontSize">
<Setter.Value>
<s:Double>50</s:Double>
</Setter.Value>
</Setter>
</Style>
</FlowDocument.Resources>
<Paragraph>Hello <Run Style="{DynamicResource BigText}" xml:space="preserve">Big text </Run>
</Paragraph>
</FlowDocument>
图像 - 它看起来如何(左)以及它应该是什么样子(看起来像序列化/反序列化魔法后)(右):