Как установить оригинальную ширину WPF FlowDocument - PullRequest
3 голосов
/ 08 апреля 2011

У меня есть такая структура XAML:

<wft:Dialog x:Class="WFT.PumpSvc.Bench.Parts.PartsPullListDialog"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wft="http://schemas.Weatherford.com">
    <wft:Dialog.Resources>
        <ResourceDictionary Source="../Resources.xaml" />
    </wft:Dialog.Resources>
    <wft:CaptionedBox Style="{StaticResource HeaderCaptionedBox}" Name="captionedBox"  Caption="Parts Pull List">
        <DockPanel>
            <DockPanel DockPanel.Dock="Right">
                <StackPanel Orientation="Vertical" DockPanel.Dock="Top">
                    <wft:TouchButton Name="closeButton">Cancel</wft:TouchButton>
                </StackPanel>
                <StackPanel Orientation="Vertical" VerticalAlignment="Bottom">
                    <wft:TouchButton Name="printButton">Print</wft:TouchButton>
                </StackPanel>
            </DockPanel>

            <wft:CaptionedBox Caption="Preview">
                <FlowDocumentPageViewer Name="documentReader">
                    <FlowDocument Background="White">
                        <Paragraph FontSize="20" FontWeight="Bold">Parts Pull List</Paragraph>
                        <Table FontWeight="Bold">
                            <Table.Columns>
                                <TableColumn Width="*" />
                                <TableColumn Width="2*" />
                            </Table.Columns>
                            <TableRowGroup>
                                <TableRow>
                                    <TableCell>...
                                    <TableCell>...
                                </TableRow>
                                <TableRow>...
                                <TableRow>...
                            </TableRowGroup>
                        </Table>
                        <Table>
                            <Table.Columns>
                                <TableColumn Width="1*" />
                                <TableColumn Width="1*" />
                                <TableColumn Width="1*" />
                                <TableColumn Width="1*" />
                                <TableColumn Width="1*" />
                                <TableColumn Width="1*" />
                                <TableColumn Width="1*" />
                            </Table.Columns>
                            <TableRowGroup Name="partRowGroup">
                                <TableRow>
                                    <TableCell>
                                        <Paragraph>
                                            <Underline>SubAssembly Type</Underline>
                                        </Paragraph>
                                    </TableCell>
                                    <TableCell>...
                                    <TableCell>...
                                    <TableCell>...
                                    <TableCell>...
                                    <TableCell>...
                                    <TableCell>...
                                </TableRow>
                            </TableRowGroup>
                        </Table>
                    </FlowDocument>
                </FlowDocumentPageViewer>
            </wft:CaptionedBox>
        </DockPanel>
    </wft:CaptionedBox>
</wft:Dialog>

Как видите, у меня нет настроек ширины на моей странице.Однако мои таблицы занимают только половину горизонтального пространства в FlowDocument.Что контролирует это?

Ответы [ 3 ]

17 голосов
/ 19 апреля 2011

Установите FlowDocument ColumnWidth = "999999"

6 голосов
/ 12 января 2012

Объект FlowDocument поддерживает функции, которые вы ищете в свойствах PageWidth, PagePadding. Свойство ColumnWidth не влияет на ширину страницы, скорее оно предлагает или может принудительно определять расположение столбцов в пределах ширины страницы.

Еще несколько подробностей из блога на эту тему:

PageWidth : это, как показано, ширина страницы документа. Количество устанавливается в независимых от устройства пикселях (пиксель составляет 1/96 дюйма, поэтому 1 ”= 96 пикселей). При установке этого значения помните, что поле страницы также должно учитываться.

PagePadding : это имя, гораздо более подходящее для WPF, чем для полей документа, фактически является полем страницы. Количество пикселей (1/96 дюйма) между краем бумаги и содержимым. Таким образом, в общем случае PagePadding + PageWidth должны быть равны или, по крайней мере, не превышать ширину бумаги. Если у вас бумага шириной 8,5 дюйма (816 пикселей) и у вас 1/2 поля (48 пикселей * 2 = 96), то у вас есть только 720 пикселей для воспроизведения для PageWidth. PagePadding имеет тип Толщина, так что вы можете установить единообразное значение, которое применяется ко всем полям, или установить каждое отдельно при желании.

ColumnWidth : Этот параметр не связан с размером контейнера, а с тем, как размещается содержимое в контейнере. Как видно из названия, он устанавливает желаемую ширину столбцов документа. Это только требуемый , так как по умолчанию макет будет корректировать ColumnWidth, чтобы наилучшим образом использовать доступную ширину страницы. Чтобы обеспечить настройку ширины столбца, необходимо установить IsColumnWidthF Flexible = False.

полный блог здесь

MSDN на свойстве PagePadding

MSDN для свойства PageWidth

0 голосов
/ 13 апреля 2011

Некоторое содержимое сообщества в свойстве FlowDocument.ColumnWidth, http://msdn.microsoft.com/en-us/library/system.windows.documents.flowdocument.columnwidth(v=vs.85).aspx, говорит: «По умолчанию ширина столбца потокового документа в 20 раз больше размера шрифта». Я добавил FontSize = "40" в FlowDocument и получил ширину, с которой я мог работать. Я просто должен был предоставить FontSizes везде, потому что я действительно не хотел 40.

...