2012-08-03 67 views
0

我使用WPF呈現XPS。這是完全動態的(XAML免費)。WPF FlowDocument到XPS渲染與文字旋轉效果

在我的代碼中,我有以下代碼來設置文本旋轉。

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,因此一些bug阻止我對全段(這裏http://social.msdn.microsoft.com/Forums/nl/wpf/thread/931f1995-d039-4364-b09b-fcd0a43fd737更多介紹)

我的問題是,設置旋轉,甚至當我使用fix,結果是不正確。一定量的字符後,文字不再旋轉:

enter image description here

注意,那截圖是從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> 
+0

所以,可以肯定的是:您已經嘗試將TextEffect應用於段落,而不僅僅是運行,對吧? – 2012-08-03 10:26:11

+0

是的,我做到了。在源代碼之後注意到,這種方法根本不起作用。 – 2012-08-03 11:48:08

回答

0

所以,我切換

固定它
effect.PositionCount = 100 

effect.PositionCount = Integer.Max 

修復了這個問題。

我沒有正確理解它代表什麼,並認爲它意味着類似於所做效果的百分比。