使用 WPF 实现平滑文本动画(选取框)

2024-04-06

尝试构建具有流畅文本动画的选取框控件。目前的努力包括:

  • 使用平移变换
  • 在 Canvas 依赖属性上使用动画(左、右)
  • 在自定义依赖属性(点)上使用动画并使用绘图视觉效果(格式化文本)
  • 使用 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)
  • 对任何可以想象的对象调用冻结
  • 禁用任何位图效果和透明度
  • 检查了所有选框控件(同样的问题)

测试于:

  • CPU:英特尔酷睿2双核(T6600)@2.2Ghz
  • 内存:4GB
  • GPU:NVidia GeForce 9600M GS(最新驱动程序)
  • 操作系统:Windows 7(64位)

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

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


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

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

尝试在 TextBlock 上使用 DoubleAnimation 动画 TranslateTransform 进行 RenderTransform,该 TextBlock 是具有默认设置的 Window 的直接子级。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WPF 实现平滑文本动画(选取框) 的相关文章

随机推荐

  • 一段时间后未调用 CLLocationManager didUpdateToLocation

    我正在尝试记录用户随时间的位置 如果用户在移动 则它可以正常工作 并且委托方法 didUpdateToLocation 会被可靠地调用 但是 如果用户静止并且应用程序在后台运行 那么在一段时间后 将不再调用委托方法 要重新启动它 需要将该应
  • 带参数的 Typescript 工厂模式

    我目前在我的项目中使用工厂模式 下面是最小的可重现代码 class A constructor public name string class B constructor public age number public address
  • Internet Explorer 中的 JavaScript 正则表达式问题

    我正在尝试使用正则表达式拆分 Javascript 中的字符串 我的代码如下 var status This is a test http yfrog com 5y6eruj var regexp http yfrog com w 0 1
  • 如何制作字典扩展方法?

    我正在尝试写一个Dictionary独立于键 值数据类型工作的扩展 我尝试通过使用object数据类型 假设它适用于任何类型 My code public static class DictionaryExtensionsClass pub
  • 具有 Spring Boot 应用程序的 docker Secret 无法在 docker swarm 模式/run/secrets 下工作

    我正在尝试设置 MySQL 容器和 Spring Boot 应用程序的数据库密码的环境变量 该密码通常在 docker 秘密中声明 echo db secured password docker secret create secret 这
  • 如何统计有向图中所有可达节点?

    有一个有向图 可能包含环 每个节点上都有一个值 如何得到每个节点的可达值之和 例如 在下图中 节点 1 的可达和为 2 3 4 5 6 7 27 节点 2 的可达总和为 4 5 6 7 22 我的解决方案 要得到所有节点的总和 我认为时间复
  • REALM、SQLITE、FCM 数据库之间的区别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 REALM SQLITE FCM数据库之间的区别 REALM SQLITE FCM 数据库之间的主要区别是什么 为什么我更喜欢这个数据
  • 何时何地使用 Lambda?

    我试图理解为什么我们真的需要 ruby 中的 lambda 或 proc 或任何其他语言 method def add a b c a b end using proc def add proc a b f Proc new x y x y
  • ds.Tables[0].Select() 代表什么

    博士在这里得到什么 DataRow dr objds Tables 0 Select ProcessName tnProcName Text 我得到的是 dr System Data DataRow 4 而不是单独的行 在 dr 中 现在由
  • IE9:我的网站上的 CPU 利用率始终较低

    我使用 JQuery 和许多拖放元素开发了一个网站 效果非常好 然而 在 IE9 上 当动态加载 使用 load 并显示大量拖放元素时 浏览器总是消耗少量 CPU 10 用于刷新 即使没有任何内容用户长时间不触摸鼠标或滚动页面即可完成此操作
  • 将 Google 域链接到 Amazon ec2 服务器

    我正在使用 Amazon EC2 实例来为 node js 应用程序提供服务 我最近通过以下方式购买了域名谷歌域名 https domains google com我想使用该域名来访问我的 node js 应用程序 Google Domai
  • 在AWS SNS(简单通知服务)电子邮件通知中发送html内容

    我在用AWS SNS 简单通知服务 发送电子邮件通知 在电子邮件的内容中 我必须以表格形式表示数据 目前我正在使用简单的文本字符串打印表格 但有格式问题当通过手机和平板电脑等较小屏幕设备访问电子邮件时 表格数据根本无法解释 我希望使用 ht
  • “结构细化中的参数类型可能不会引用该细化之外定义的抽象类型”

    当我编译时 object Test extends App implicit def pimp V xs Seq V new def dummy x V x I get fsc d aoeu go scala go scala 3 err
  • UITableView 中的图像不断重新加载,并且滚动时错误的图像会闪烁

    我创建了一个 UITableView 它根据 URL 请求填充每个单元格 我使用 dispatch queue 来防止 UItableView 冻结 由于某种原因 当我滚动 UITableView 时 图像会闪烁并消失 并填充错误的单元格一
  • 如何循环遍历表来查找数据集?

    我必须找到订单生命周期的时间差 以分钟为单位 即每个订单从收到订单 活动 ID 1 到键入 2 到打印 3 到交付 4 的时间 for eg 我完全迷失了我应该采取哪种方法 用例或 if then 语句 类似于 for every 循环遍历
  • 如何获取多列的groupby总和

    我有一个 pandas 数据框 如下所示 index col1 col2 col3 col4 col5 0 a c 1 2 f 1 a c 1 2 f 2 a d 1 2 f 3 b d 1 2 g 4 b e 1 2 g 5 b e 1
  • C# 中的 MongoDB 地理空间索引

    我一直在尝试使用 C 官方驱动程序创建和查询 MongoDB 但一次又一次地遇到同样的问题 问题是如何用地理信息创建数据 我只是找不到答案 Code MongoUrl url new MongoUrl mongodb xxx xx x xx
  • Docker:打开/certs/domain.crt:权限被拒绝

    我正在尝试设置一个私人 docker 注册表 我正在使用我自己生成的证书 但我的注册表的 docker 日志显示此错误 time 2015 12 08T08 51 54Z level fatal msg open certs domain
  • 使用 MutationObserver 比较新旧文本内容

    我需要比较更改发生之前和之后元素子级内的文本 我可以使用下面的脚本触发函数并返回新值 但我还需要能够访问旧值 changeButton click function var currentValue parseInt changingEle
  • 使用 WPF 实现平滑文本动画(选取框)

    尝试构建具有流畅文本动画的选取框控件 目前的努力包括 使用平移变换 在 Canvas 依赖属性上使用动画 左 右 在自定义依赖属性 点 上使用动画并使用绘图视觉效果 格式化文本 使用 CompositionTarget Rendering