2010-06-09 56 views
6

尝试使用平滑文字动画构建选取框控件。目前的工作包括:使用WPF的平滑文字动画(选框)

  • 使用翻译转换
  • 在画布上依赖属性使用动画(左,右)
  • 使用自定义依赖属性(点)的动画,并使用拉丝的视觉效果(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。层)
  • 调用冻结任何可以想象的对象
  • 禁用任何位图效果和透明度
  • 经过所有字幕控制那里(同样的问题)

测试上:

  • CPU:INTELL睿2双核(T6600)@ 2.2GHz的
  • 内存:4GB
  • GPU :的NVIDIA GeForce 9600M GS(最新的驱动程序)
  • 操作系统:Windows 7(64位)

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

从响应看来,这不是一个WPF问题(其他选框控件适用于其他人,但不适合我),坚果我在我测试过的每台机器上都遇到同样的问题。

+0

看来这是测试的一些电脑有问题。另外构建发布版本也有很大帮助。 – Goran 2010-06-27 15:56:15

回答

1

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

而且WPF版本也可以找到here

+0

是的,它是我查看的控件之一(包括wpf版本),它不光滑,对于这样一个简单的任务而言,这是相当耗费资源的。 – Goran 2010-06-09 00:16:26

+0

我在一些旧式硬件上尝试了Jobi Joy的示例应用程序的Silverlight和WPF版本。虽然动画不仅仅是一个简单的选取框,它们都能够流畅地动画并使用非常少的资源。我认为对于导致问题的硬件或环境一定有一些特别的东西。也许你应该为你的问题添加详细的硬件,操作系统,.NET框架规范和资源使用数字,以便其他人可以尝试复制你的问题。 – 2010-06-09 00:32:29

+0

这真的很奇怪 - 我已经在文本上测试过每台机器,图像每2到5秒就会抖动一次。我已经更新了我的问题。 – Goran 2010-06-09 09:39:57

4

你的动画将完全由MilCore层进行处理,如果:

  1. 你TranslateTransform是RenderTransform(不是LayoutTransform)和
  2. 您可以使用简单的动画,如DoubleAnimation和
  3. 你的对象有没有剪辑或不透明度计算

尝试使用DoubleAnimation是动画TranslateTransform对TextBlock的是使用默认设置窗口的直接孩子的RenderTransform。

  • 如果这仍是缓慢的,有一些慢有关Direct3D的系统,因为托管代码是不是在所有涉及和MilCore的调用非常简单,但

  • 如果工程进展顺利,高效,逐步将其更改为性能较差的代码,以查看导致经济下滑的因素。

给苡乐的回答你的回应我怀疑的问题是在某处你的硬件或Direct3D的设置,但要找出的唯一方法就是测试它。

+1

我试过了(查看更新后的问题) - 我仍然遇到同样的问题。您可以想到的任何诊断来查明我正在处理的计算机是否有问题? – Goran 2010-06-09 09:41:05

3

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

+0

好主意 - 但它不能解决我的问题。这似乎是我的机器(操作系统或硬件)的错,但我无法想到任何事情。 – Goran 2010-06-09 09:42:02

+2

圣牛!我曾经遇到过涉及50个UI元素的动画问题。这困扰了我好几个星期,但被这个属性清除了。 Arg,为什么需要我很长时间才能找到这个? – Jeb 2010-06-14 19:51:01