首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有文本旋转效果的WPF FlowDocument到XPS渲染

具有文本旋转效果的WPF FlowDocument到XPS渲染
EN

Stack Overflow用户
提问于 2012-08-03 18:12:56
回答 1查看 985关注 0票数 0

我正在使用WPF渲染XPS。这是完全动态的(没有XAML)。

在我的代码中,我有以下代码来设置文本旋转。

代码语言:javascript
复制
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上有更多)

我的问题是,即使我使用修复,结果也不正确。在一定数量的字符之后,文本不再旋转:

请注意,该屏幕截图来自XPS,我将结果呈现到该XPS。当我将其呈现为XAML时,您可以看到效果被正确地映射到文本中的所有Runs

代码语言:javascript
复制
<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代码

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-03 20:05:12

因此,我通过切换来修复它

代码语言:javascript
复制
effect.PositionCount = 100

代码语言:javascript
复制
effect.PositionCount = Integer.Max

解决了这个问题。

我没有正确地理解它代表的是什么,并认为它意味着完成的效果百分比之类的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11793670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档