在TabControl中滚动FlowDocument

时间:2013-01-28 23:15:05

标签: wpf scroll tabcontrol flowdocument

我有这个XAML片段:

<!-- ... -->
<TabControl>
    <TabItem>
        <!-- ... -->
    </TabItem>

    <TabItem Header="Source" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True">
        <FlowDocumentScrollViewer>
            <FlowDocument>
                <Paragraph>
                    <TextBlock
                        Text="{Binding Path=CurrentObject.Source}"
                        FontFamily="Consolas,Courier,Segoe UI"
                        FontSize="12" 
                        />
                </Paragraph>

            </FlowDocument>
        </FlowDocumentScrollViewer>
    </TabItem>
</TabControl>
<!-- ... -->

问题是流文档不会水平滚动。我一直无法启用它。

任何线索?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这里有几件事。第一个是在Paragraph中使用控件的功能与为了适合FlowDocument而包装的Run不同。

第二个是FlowDocument适合您的FlowDocumentScrollViewer。如果像你一样向它添加一个控件,它将适合FlowDocument和viewer的宽度,文本将超出TextBlock边框。这意味着您的文档不需要滚动条;你的TextBlock会。您可以通过将TextBlock的TextWrapping属性设置为Wrap来实现此目的。

要解决此问题,请将PageWidth设置为超出查看器宽度限制的内容,如下所示:

    <FlowDocumentScrollViewer>
        <FlowDocument PageHeight="1056"
                      PageWidth="816">
            <Paragraph>
                <TextBlock
                    Text="{Binding Path=CurrentObject.Source}"
                    FontFamily="Consolas,Courier,Segoe UI"
                    FontSize="12" 
                    />
            </Paragraph>

        </FlowDocument>
    </FlowDocumentScrollViewer>

或绑定到TextBlock:

    <FlowDocumentScrollViewer>
        <FlowDocument PageHeight="1056"
                      PageWidth="{Binding ElementName=Part, Path=ActualWidth}">
            <Paragraph>
                <TextBlock
                    Text="{Binding Path=CurrentObject.Source}"
                    FontFamily="Consolas,Courier,Segoe UI"
                    FontSize="12" 
                    />
            </Paragraph>

        </FlowDocument>
    </FlowDocumentScrollViewer>

最后一点是FlowDocumentScrollViewer拥有它自己的Horizo​​ntalScrollBarVisibility属性,你可以使用它(除非一些样式问题阻止它)。