应用ResourceDictionary的FlowDocument样式,但不应用FontSize和FontFamily

时间:2015-01-13 12:04:43

标签: c# xaml flowdocument

我在代码中动态创建了一个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>

图像 - 它看起来如何(左)以及它应该是什么样子(看起来像序列化/反序列化魔法后)(右): Image - how it looks (left) and how it should look like (and looks like after serialize/deserialize magic) (right)

0 个答案:

没有答案