2013-01-28 1 views
0

У меня есть этот фрагмент XAML:Прокрутка FlowDocument внутри TabControl

<!-- ... --> 
<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

Здесь пара вещей. Первое заключается в том, что использование элемента управления в Paragraph функционирует иначе, чем Run, который будет завершен в соответствии с вашим FlowDocument.

Во-вторых, FlowDocument будет соответствовать вашему FlowDocumentScrollViewer. Если вы добавите элемент управления к нему, как и вы, он будет соответствовать ширине FlowDocument и средства просмотра, а текст будет выходить за рамки границ TextBlock. Это означает, что вашему документу не требуется полоса прокрутки; ваш TextBlock. Вы можете увидеть это, установив свойство TextWrapping TextBlock для 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 есть собственное свойство HorizontalScrollBarVisibility, которое вы можете использовать для этого (если только не проблема с некоторым стилем).