6

尝试使用平滑的文本动画构建选取框控件。目前的努力包括:

  • 使用翻译变换
  • 在 Canvas 依赖属性(左、右)上使用动画
  • 在自定义依赖属性 (Point) 上使用动画并使用绘图视觉效果 (formattedtext)
  • 使用 CompositionTarget.Rendering

但动画仍然不稳定且占用大量资源(2-10% CPU)。

在默认 wpf 窗口中使用的测试代码我假设应该产生一个平滑的动画:

   <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)
  • 在任何可以想象的对象上调用 freeze
  • 禁用任何位图效果和透明度
  • 检查了所有的选框控件(同样的问题)

测试:

  • CPU:Intell core 2 duo (T6600) @2.2Ghz
  • 内存:4GB
  • GPU:NVidia GeForce 9600M GS(最新驱动)
  • 操作系统:Windows 7(64 位)

任何想法(或更好的代码示例)?

从响应来看,这似乎不是 wpf 问题(其他选取框控件对其他人来说可以正常工作,但对我来说不行),但我在每台测试过的机器上都遇到了同样的问题。

4

3 回答 3

4

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

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

尝试在作为具有默认设置的 Window 的直接子代的 TextBlock 上对 RenderTransform 使用 DoubleAnimation 动画 TranslateTransform。

  • 如果这仍然很慢,则说明您的 Direct3D 系统有些慢,因为根本不涉及托管代码,而且 MilCore 的调用非常简单,但是

  • 如果它运行顺利且高效,请逐步将其更改为性能不佳的代码,以查看是什么更改导致速度变慢。

鉴于您对 Jobi Joy 的回答的回应,我怀疑问题出在您的硬件或 Direct3D 设置中,但找出问题的唯一方法是对其进行测试。

于 2010-06-09T00:43:56.237 回答
3

如果您使用的是 WPF 4.0,请尝试CacheMode="BitmapCache"在您正在制作动画的元素上设置(在 XAML 中),在这种情况下,可能是TextBlock.

于 2010-06-09T01:34:54.360 回答
1

希望这可以帮助你 - http://jobijoy.blogspot.com/2008/08/silverlight-marquee-control.html

WPF 版本也可以在这里找到

于 2010-06-09T00:12:59.623 回答