33027


OS: Windows7、Windows10  
.NET Framework: 3.0、4.5  
開発環境: VisualStudio 2013、VisualStudio 2015

WPFでスタイルを設定していたところ、  
`FlowDocument`のスタイルが意図しない挙動を起こしました。

[code]

    <Window 
        x:Class="WpfSandBox.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="200" 
        Width="200">
        <StackPanel>
            <!-- スタイル未設定 -->
            <RichTextBox>
                <FlowDocument>
                    <Paragraph>ABC</Paragraph>
                </FlowDocument>
            </RichTextBox>
            <!-- 空のスタイル設定 -->
            <RichTextBox>
                <FlowDocument>
                    <FlowDocument.Style>
                        <Style TargetType="FlowDocument"></Style>
                    </FlowDocument.Style>
                    <Paragraph>ABC</Paragraph>
                </FlowDocument>
            </RichTextBox>
            <!-- フォントのスタイル設定 -->
            <RichTextBox>
                <FlowDocument>
                    <FlowDocument.Style>
                        <Style TargetType="FlowDocument">
                            <Setter Property="FontFamily" Value="{x:Static SystemFonts.MessageFontFamily}"/>
                            <Setter Property="FontSize" Value="{x:Static SystemFonts.MessageFontSize}"/>
                            <Setter Property="FontStyle" Value="{x:Static SystemFonts.MessageFontStyle}"/>
                            <Setter Property="FontWeight" Value="{x:Static SystemFonts.MessageFontWeight}"/>
                        </Style>
                    </FlowDocument.Style>
                    <Paragraph>ABC</Paragraph>
                </FlowDocument>
            </RichTextBox>     
        </StackPanel>
    </Window>
    
[/code]

2番目の`RichTextBox`の表示だけ見た目が異なります。  
スタイルに何も設定していないにも関わらず、  
子要素の`Paragraph`のフォントとフォントのサイズが変化したのです。  
3番目の`RichTextBox`のように、同じフォントを設定すると元に戻りました。

ここで質問となるのですが、  
このスタイルの挙動は`FlowDocument`に何か問題があるのでしょうか？  
それとも、フォントが変わってしまうのは正しいスタイルの挙動なのでしょうか？  
(直感的には設定していないプロパティへ影響を与えるのは好ましくないように思えます。)


CC BY-SA 3.0
2017-03-01T14:20:49.643
33022
2017-03-02T01:58:36.287
70
question
wpf
FlowDocumentに空のスタイルを設定すると、子要素のフォントが変わってしまう


`RichTextBox`のデフォルト`Style`では内部の`FlowDocument`の`Style`として

[code]

    <Style TargetType="FlowDocument">
        <Setter Property="OverridesDefaultStyle" Value="True" />
    </Style>
    
[/code]

を指定しています。

おそらく`FlowDocument`の`Style`を直接指定した場合、`OverridesDefaultStyle`が`False`となるので`FlowDocument`としての`Style`が継承されてしまい、入力用のゴシック体システムフォントではなく印刷用のセリフのあるフォントが表示されるのでしょう。

なおVisual Studio
2015のライブプロパティエクスプローラーでは`FlowDocument`の問題のプロパティ値が正しく表示されないようです。こちらはIDEのバグだと思われます。


CC BY-SA 3.0
2017-03-02T01:21:55.600
33027
2017-03-02T01:58:36.287
2017-03-02T01:58:36.287
5750
5750
33022
answer