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

     2023-02-19     50

关键词:

【中文标题】使用 WPF 平滑文本动画(选取框)【英文标题】:Smooth text animation (Marquee) using WPF 【发布时间】:2011-03-01 10:39:50 【问题描述】:

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

使用平移变换 在 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) 对任何可以想象的对象调用冻结 禁用任何位图效果和透明度 检查了所有的选取框控件(同样的问题)

测试日期:

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

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

从回复来看,这似乎不是 wpf 问题(其他选取框控件对其他人来说很好,但对我来说不是),但我在每台测试过的机器上都遇到了同样的问题。

【问题讨论】:

似乎有些电脑有问题。构建发布版本也有很大帮助。 【参考方案1】:

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

WPF版本也可以找到here

【讨论】:

是的,它是我看过的控件之一(包括 wpf 版本),它并不流畅,而且对于这样一个简单的任务来说它是相当耗费资源的。 我在一些旧硬件上尝试了 Jobi Joy 示例应用程序的 Silverlight 和 WPF 版本。两者的动画都很流畅并且使用的资源很少,尽管它们的动画远不止一个简单的选取框。我认为导致问题的硬件或环境一定有什么特别之处。也许您应该在您的问题中添加详细的硬件、操作系统、NET Framework 规范和资源使用情况编号,以便其他人可以尝试复制您的问题。 这真的很奇怪——我在文本和图像上测试过的每台机器每 2 到 5 秒抖动一次。我已经更新了我的问题。 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。【参考方案2】:

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

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

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

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

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

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

【讨论】:

我已经尝试过了(请参阅更新的问题) - 我仍然遇到同样的问题。如果我正在处理的机器出现问题,您能想到任何诊断方法吗?【参考方案3】:

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

【讨论】:

好主意 - 但它不能解决我的问题。看来问题出在我的机器(操作系统或硬件)上,但我什么都想不出来。 天哪!我在涉及大约 50 个 UI 元素的动画上遇到了问题。这困扰了我几个星期,但被这一属性清除了。 Arg,为什么我花了这么长时间才找到这个?

其他元素后面的 Wpf 文本选取框

】其他元素后面的Wpf文本选取框【英文标题】:WpfTextmarqueebehindotherelement【发布时间】:2016-01-1423:45:18【问题描述】:我构建了一个带有动画文本的消息栏,seethe.giffromtheanimation。就像您可以在前景中看到文本“fly\'s”并隐藏占... 查看详情

WPF 滚动选取框 - HandOffBehavior

...:2015-11-2208:30:49【问题描述】:我试图弄清楚如何最好地使用WPF的HandOffBehavior技术。现在,我的应用程序中有一个滚动错误选取框,它会动画打开、滚动错误消息,然后自行关闭。这周我刚刚开始构建这个WPF应用程序。问题是我... 查看详情

wpf学习第四十八章理解wpf动画

...人员必须从头构建自己的动画系统。最常用的技术是结合使用计时器和一些自定义的绘图逻辑。WPF通过自带的基于属性的动画系统,改变了这种情况。接下来的两节将描述这两者之间的区别。一、基于时间的动画  假如需要旋... 查看详情

使用快速彩色文本框在 WPF 中突出显示语法

】使用快速彩色文本框在WPF中突出显示语法【英文标题】:WorkwithFastColoredTextBoxforSyntaxHighlightinginWPF【发布时间】:2016-05-3010:35:33【问题描述】:是否可以使用快速彩色文本框在WPF中进行语法高亮。http://www.codeproject.com/Articles/16187... 查看详情

如何使 WPF 文本框使用密码字符?

】如何使WPF文本框使用密码字符?【英文标题】:HowtomakeaWPFTextBoxusepasswordcharacters?【发布时间】:2011-04-1702:31:44【问题描述】:我需要动态设置它..我可以将密码框设为正常文本吗?我的意思是-用户可以看到他输入的文本。???它... 查看详情

如何在 WPF 中制作选取框进度条?

】如何在WPF中制作选取框进度条?【英文标题】:HowdoImakeamarqueeprogressbarinWPF?【发布时间】:2010-10-1222:12:03【问题描述】:在Winforms中,我可以将进度条的ProgressBarStyle设置为Marqee,对于我不知道它需要多长时间的进程,这将在无... 查看详情

WPF:在只读文本框上使用拼写检查

】WPF:在只读文本框上使用拼写检查【英文标题】:WPF:UseSpellCheckOnRead-OnlyTextBox【发布时间】:2010-11-1107:10:51【问题描述】:我希望在单词拼写错误的地方显示带有波浪形红线的文本,但我只希望文本是可选择的,而不是可编辑... 查看详情

UILabel 文本发光和选取框

...owandmarquee【发布时间】:2012-04-2605:22:43【问题描述】:我使用this滚动uilabel文本和this用于发光效果。但是我想要发光和选取框uilabel文本,我已经从上面的代码中用RSSGlowLabelclass替换了UILabel。但我没有得到发光效果。任何人都可... 查看详情

在 wpf 文本框中开始一个新行

...inwpftextbox【发布时间】:2011-12-1312:03:40【问题描述】:我使用WPF创建了一个包含文本框的小型GUI。我希望用户能够开始新的生产线。如何让用户在WPF文本框中开始新行(使用\\n或\\r)?我希望用户能够通过按“enter”来开始新的... 查看详情

在内部类中设置 WPF 文本框值

...鸟问题,但我不是一个有经验的程序员。我将WCF与WPF结合使用来创建带有GUI的聊天室。我的问题是我想使用回调处理程序来设置带有传入消息的文本框的值。因为这是一个内部类,所以我不能调用文本框。有人知道这个问题的解... 查看详情

DataGridTemplateColumn 绑定在 WPF 中使用文本框和 MVVM

】DataGridTemplateColumn绑定在WPF中使用文本框和MVVM【英文标题】:DataGridTemplateColumnBindingUsingaTextBoxinWPFwithMVVM【发布时间】:2011-06-2307:30:16【问题描述】:我有一个绑定到列表(ListOne)的DataGrid。在网格内,我想显示一个额外的TextBox,... 查看详情

文本框中的 WPF 命令参数

...extbox【发布时间】:2010-11-0406:01:41【问题描述】:我正在使用MVVM模式,并且我在父窗口中有一个文本框,并希望将一些文本发送到将出现在Textchanged上的弹出窗口。我尝试使用命令参数,但它不适合我。请帮忙..谢谢沙拉特【问... 查看详情

在 wpf 中的自定义样式上,文本框的文本始终为空

...【发布时间】:2021-09-0818:30:37【问题描述】:嘿,我正在使用XAML代码为我的WPF应用程序中的文本框设计一种新样式。文本框是文本框和文本块的组合,我使用文本块在文本为空时显示文本框的名称,在填充文本时消失,但是当... 查看详情

WPF 文本框 RaiseEvent

...ent【发布时间】:2012-06-0520:34:57【问题描述】:我有一些使用掩码的验证代码以及文本框上的PreviewTextInput和PreviewKeyDown事件。当我手动更改文本框中的值时,验证工作完美。当我以编程方式设置值时,验证不会开始,直到我单击... 查看详情

c#软件中wpf里面使用[文本框].text中的text不能使用了,为啥?

...,说是没有.Text这个,再跳出来的提示里面也没有。今天使用就错了,昨天还好好的,没有更改什么东西。头文件这些都没有动,以前编写好的代码打开,也能打开,就是新写的就出现错误提示。关键看你使用的是WPF里的那个控... 查看详情

C#:在 WPF 中拖放(富文本框)

...问题描述】:我想在WPF中实现拖放机制,但它不起作用...使用Windows-Forms就可以了,...首先我将AllowDrop设置为True。在windows-forms中,您已经可以将项目拖动到Richtextbox中并且光标会发生变化。使用WPF....没有任何反应。 查看详情

WPF - 在 Wrappannel 中显示图像和文本框

...示图像列表和文本,我试图在谷歌上找到但像往常一样都使用硬编码值。第1步:在XAML文件中,我使用了包装面板,代码如下:<ListViewWidth=" 查看详情

WPF 文本框和滚动行为

...9-2800:20:07【问题描述】:我有问题。我需要在ScrollViewer中使用控件托管网格,以防止文本框在UI处被截断或折叠为零。我还希望在用户更改窗口宽度时扩展文本框的with。我正在将Window的内容设置为以下代码<DockPanel><TreeViewD... 查看详情