Рендеринг WPF FlowDocument в XPS с эффектом поворота текста

Я делаю XPS с помощью WPF. Это полностью динамично (без XAML).

В моем коде у меня есть следующий код для настройки поворота текста.

Private Shared Sub ApplyRotation(style As BoxStyleData, run As TextElement)
  If style IsNot Nothing Then
    If Math.Abs(style.TextRotation) > Double.Epsilon Then
      Dim effects = New TextEffectCollection
      Dim effect = New TextEffect()
      effect.Transform = New RotateTransform(style.TextRotation)
      effect.PositionCount = 100
      effects.Add(effect)
      run.TextEffects = effects
    End If
  End If
End Sub

Он находится внутри FlowPanel, поэтому какая-то ошибка не позволяет мне установить поворот для всего абзаца (подробнее об этом здесь http://social.msdn.microsoft.com/Forums/nl/wpf/thread/931f1995-d039).-4364-b09b-fcd0a43fd737)

Моя проблема в том, что даже когда я использую исправление, результат неверен. После определенного количества символов текст больше не поворачивается:

введите здесь описание изображения

Обратите внимание, что этот снимок экрана сделан с XPS, на который я визуализирую результат. Когда я визуализирую его в XAML, вы можете видеть, что эффект правильно сопоставлен со всеми Runs в тексте.

<Paragraph Margin="0,0,0,0" Padding="0,18.9,0,0" TextAlignment="Center" ClearFloaters="None" FontSize="14.62">
<Span FontSize="14.62"><Run><Run.TextEffects><TextEffect PositionCount="100"><TextEffect.Transform><RotateTransform Angle="356.7" /></TextEffect.Transform></TextEffect></Run.TextEffects>Denken Sie frühzeitig</Run></Span><LineBreak />
<Span FontSize="14.62"><Run><Run.TextEffects><TextEffect PositionCount="100"><TextEffect.Transform><RotateTransform Angle="356.7" /></TextEffect.Transform></TextEffect></Run.TextEffects>an den</Run></Span><LineBreak />
<Span FontSize="14.62"><Run><Run.TextEffects><TextEffect PositionCount="100"><TextEffect.Transform><RotateTransform Angle="356.7" /></TextEffect.Transform></TextEffect></Run.TextEffects>Räderwechsel!</Run></Span><LineBreak />
<LineBreak />
<Span FontSize="14.62"><Run><Run.TextEffects><TextEffect PositionCount="100"><TextEffect.Transform><RotateTransform Angle="356.7" /></TextEffect.Transform></TextEffect></Run.TextEffects>Unser</Run></Span><LineBreak />
<Span FontWeight="Bold" FontSize="14.62"><Run><Run.TextEffects><TextEffect PositionCount="100"><TextEffect.Transform><RotateTransform Angle="356.7" /></TextEffect.Transform></TextEffect></Run.TextEffects>Winter Check-Point</Run></Span><LineBreak />
<Span FontSize="14.62"><Run><Run.TextEffects><TextEffect PositionCount="100"><TextEffect.Transform><RotateTransform Angle="356.7" /></TextEffect.Transform></TextEffect></Run.TextEffects>ist für Sie offen!</Run></Span></Paragraph>

Теперь кто-нибудь знает, как добиться вращения всего текста, поскольку мне это действительно нужно.

Спасибо

РЕДАКТИРОВАТЬ: для быстрой проверки того, что он не работает должным образом, вы можете создать приложение WPF и просто вставить следующий код XAML

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
    <FlowDocumentPageViewer>
      <FlowDocument>
        <Paragraph Margin="0,0,0,0" Padding="0,18.9,0,0" TextAlignment="Center" ClearFloaters="None" FontSize="14.62">
          <Span FontSize="14.62">
            <Run>
              <Run.TextEffects>
                <TextEffect PositionCount="100">
                  <TextEffect.Transform>
                    <RotateTransform Angle="356.7" />
                  </TextEffect.Transform>
                </TextEffect>
              </Run.TextEffects> Denken Sie frühzeiti
            </Run>
          </Span>
          <LineBreak />
          <Span FontSize="14.62">
            <Run>
              <Run.TextEffects>
                <TextEffect PositionCount="100">
                  <TextEffect.Transform>
                    <RotateTransform Angle="356.7" />
                  </TextEffect.Transform>
                </TextEffect>
              </Run.TextEffects> an den
            </Run>
          </Span>
          <LineBreak />
          <Span FontSize="14.62">
            <Run>
              <Run.TextEffects>
                <TextEffect PositionCount="100">
                  <TextEffect.Transform>
                    <RotateTransform Angle="356.7" />
                  </TextEffect.Transform>
                </TextEffect>
              </Run.TextEffects> Räderwechsel!
            </Run>
          </Span>
          <LineBreak />
          <LineBreak />
          <Span FontSize="14.62">
            <Run>
              <Run.TextEffects>
                <TextEffect PositionCount="100">
                  <TextEffect.Transform>
                    <RotateTransform Angle="356.7" />
                  </TextEffect.Transform>
                </TextEffect>
              </Run.TextEffects> Unser
            </Run>
          </Span>
          <LineBreak />
          <Span FontWeight="Bold" FontSize="14.62">
            <Run>
              <Run.TextEffects>
                <TextEffect PositionCount="100">
                  <TextEffect.Transform>
                    <RotateTransform Angle="356.7" />
                  </TextEffect.Transform>
                </TextEffect>
              </Run.TextEffects> Winter Check-Point
            </Run>
          </Span>
          <LineBreak />
          <Span FontSize="14.62">
            <Run>
              <Run.TextEffects>
                <TextEffect PositionCount="100">
                  <TextEffect.Transform>
                    <RotateTransform Angle="356.7" />
                  </TextEffect.Transform>
                </TextEffect>
              </Run.TextEffects> ist für Sie offen!
            </Run>
          </Span>
        </Paragraph>
      </FlowDocument>
    </FlowDocumentPageViewer>
  </Grid>
</Window>

person Ales Ruzicka    schedule 03.08.2012    source источник
comment
Итак, просто чтобы быть уверенным: вы уже пытались применить TextEffect для абзаца, а не только для Run, верно?   -  person niao    schedule 03.08.2012
comment
Да, я сделал. После исходного кода отмечается, что этот подход вообще не работает.   -  person Ales Ruzicka    schedule 03.08.2012


Ответы (1)


Итак, я исправил это, переключив

effect.PositionCount = 100

to

effect.PositionCount = Integer.Max

что устранило проблему.

Я не правильно понял, что это означает, и подумал, что это означает что-то вроде процента сделанного эффекта.

person Ales Ruzicka    schedule 03.08.2012