首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WPF的平滑文本动画(Marquee)

使用WPF的平滑文本动画(Marquee)
EN

Stack Overflow用户
提问于 2010-06-09 00:09:51
回答 3查看 20.2K关注 0票数 6

试图用平滑的文本动画构建一个块控件。目前的努力包括:

  • 使用平移变换
  • 在画布依赖项属性上使用动画(左、右)
  • 在自定义依赖项属性(Point)上使用动画,并使用绘图可视化(格式文本)
  • 使用CompositionTarget.Rendering

但是动画仍然是不稳定和资源密集的(2-10% CPU)。

在默认的wpf窗口中使用的测试代码,我假设它会生成一个平滑的动画:

代码语言:javascript
复制
   <TextBlock x:Name="_box" FontSize="64" CacheMode="BitmapCache" Text="lorem ipsum">
        <TextBlock.RenderTransform>
            <TranslateTransform x:Name="AnimatedTranslateTransform" X="0" Y="0" />
        </TextBlock.RenderTransform>
        <TextBlock.Triggers>
            <EventTrigger RoutedEvent="TextBlock.Loaded">
              <BeginStoryboard>
                <Storyboard>
                  <DoubleAnimation
                    Storyboard.TargetName="AnimatedTranslateTransform" 
                    Storyboard.TargetProperty="X"
                    From="-300" To="300" Duration="0:0:5" 
                    AutoReverse="True" RepeatBehavior="Forever" />
                </Storyboard>
              </BeginStoryboard>
            </EventTrigger>
          </TextBlock.Triggers>
    </TextBlock>

核对表:

  • 确认没有软件渲染正在进行(ms性能工具和检查RenderCapability.Tier)
  • 对任何可想象的物体调用冻结
  • 禁用任何位图效果和透明度
  • 检查了外面的所有块控件(相同的问题)

在以下方面测试:

  • 处理器: Intell核心2 duo (T6600) @2.2Ghz
  • RAM: 4GB
  • GPU: NVidia GeForce 9600MGS(最新驱动程序)
  • 操作系统: Windows 7(64位)

有什么想法(或者更好的代码示例)?

从响应来看,这似乎不是wpf问题(其他块控件对其他人很好,但对我来说不是),在我测试的每台机器上,我都会遇到同样的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-09 00:12:59

希望这能帮到你- http://jobijoy.blogspot.com/2008/08/silverlight-marquee-control.html

而WPF版本也可以找到这里

票数 1
EN

Stack Overflow用户

发布于 2010-06-09 00:43:56

在以下情况下,您的动画将完全在MilCore层处理:

  1. 您的TranslateTransform是RenderTransform (而不是LayoutTransform),并且
  2. 使用简单的动画,如DoubleAnimation,以及
  3. 您的对象没有裁剪或不透明计算。

尝试在带有默认设置的窗口的直接子窗口的TranslateTransform上使用双动画动画RenderTransform。

  • 如果这仍然很慢,那么您的Direct3D系统就会有些慢,因为根本不涉及托管代码,而且MilCore的调用非常简单,但是
  • 如果它能顺利有效地工作,那么逐步将它更改为性能不佳的代码,看看是什么变化导致了减速。

考虑到你对柔比Joy的回答的反应,我怀疑问题就在你的硬件或Direct3D设置的某个地方,但唯一的方法是测试它。

票数 4
EN

Stack Overflow用户

发布于 2010-06-09 01:34:54

如果您使用的是WPF4.0,请尝试在您正在动画的元素上设置CacheMode="BitmapCache" (在XAML中),在本例中,可能是一个TextBlock

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

https://stackoverflow.com/questions/3002271

复制
相关文章

相似问题

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