在 DataTrigger 内绑定 Storyboard 动画会导致 XamlParser 崩溃

2024-03-28

我希望我的应用程序在每次发生特定事件时将椭圆动画到新位置。出于测试目的,我制作了一个更改视图模型属性的按钮,并且该属性绑定到触发动画的数据触发器,但后来我希望视图模型根据我尚未实现的其他事件触发它 - 这就是为什么我可以不要直接在视图中使用绑定到该按钮的事件触发器,我需要视图模型。 因为椭圆应该在每次触发时由动画移动到新位置,所以我需要将 DoubleAnimation 的 TO 属性绑定到视图模型中的值。当我使用普通的事件触发器时,这工作得很好,但使用数据触发器会使带有该绑定的 XamlParser 崩溃。除了 XAMLParseException 之外,我没有收到任何特定错误,但是,如果我将绑定更改为固定值(例如 5),它将正常工作。

这是 xaml:

<Window x:Class="AnimationExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AnimationExample"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">

    <Window.DataContext>
        <local:MainWindowViewModel />
    </Window.DataContext>

    <Canvas Name="CanvasWrapper" Width="525" Height="350">
        <Button Content="Next Animation" Command="{Binding NextAnimation}"/>
            <Ellipse Fill="Red" Width="60" Height="60" Canvas.Left="60" Canvas.Top="60">
            <Ellipse.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding CanAnimate}" Value="True" >
                            <DataTrigger.EnterActions>
                                <BeginStoryboard >
                                    <Storyboard>
                                        <!-- Works fine without the binding -->
                                        <DoubleAnimation
                                            Storyboard.TargetProperty="(Canvas.Left)"
                                            Duration="0:0:10" To="{Binding NextPosX}" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Ellipse.Style>
        </Ellipse>
    </Canvas>
</Window>

我相信解析器无法找到绑定的正确路径,即使代码完成显示它。有没有办法获得正确的绑定路径?


阅读本节数据绑定和动画 https://msdn.microsoft.com/library/ms752312(v=vs.100).aspx:基本上动画是冻结创建的(即它的所有属性都是只读的,因此无法修改),必须重新创建动画以反映属性更改的通知。

看看这个博客条目 http://blogs.microsoft.co.il/tamir/2007/03/19/how-to-bind-to-animation-to-and-from-properties/ and at this https://stackoverflow.com/questions/2186933/wpf-animation-binding-to-the-to-attribute-of-storyboard-animationSOF问题。

根据您的评论更新:

首先,为什么 DataTrigger 和 StoryBoard 绑定不起作用?

答案由提供故事板概述 https://msdn.microsoft.com/de-de/library/ms742868(v=vs.85).aspx如下:

您不能使用动态资源引用或数据绑定表达式 设置 Storyboard 或动画属性值。那是因为 Style 中的所有内容都必须是线程安全的,并且计时系统 必须冻结 Storyboard 对象以使其线程安全。故事板 如果它或其子时间线包含动态资源,则无法冻结 引用或数据绑定表达式。欲了解更多信息 冻结和其他 Freezable 功能,请参阅 Freezable 对象 概述。

为什么绑定适用于 EventTrigger 而不适用于 DataTrigger?

再次来自同一来源:

通过属性 Trigger 对象应用的动画的行为方式更多 比 EventTrigger 动画或启动动画复杂的方式 使用故事板方法。他们用定义的动画“切换” 其他 Trigger 对象,但与 EventTrigger 组合 方法触发的动画。

I will assume他们的意思是,使用 EventTriggers 时,故事板会在事件发生时重新创建,但使用 DataTriggers 时情况并非如此 - “切换”似乎意味着共享故事板。我将创建一个 SO 问题来验证这是什么意思(此处创建的问题:故事板:EventTrigger 与 DataTrigger https://stackoverflow.com/questions/34265487/storyboard-eventtrigger-vs-datatrigger ).

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

在 DataTrigger 内绑定 Storyboard 动画会导致 XamlParser 崩溃 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 使用 UMD 捆绑包捆绑 Angular 2 应用程序(不构建供应商捆绑包)

    我目前正在将我的 Angular 2 应用程序与 WebPack 捆绑在一起 我们仍在快速循环 因此我们不想增加构建和应用程序加载过程的延迟 而是希望包含很少变化的 Angular 2 UMD CDN 准备的捆绑包 例如
  • PySpark 输出文件数量

    我是 Spark 新手 我有一个简单的 pyspark 脚本 它读取 json 文件 将其展平并将其作为 parquet 压缩文件写入 S3 位置 读取和转换步骤运行得非常快 并使用 50 个执行器 我在 conf 中设置 但写入阶段耗时较
  • Devise::PasswordsController#create 中的 EOFError

    我在从 Ruby on Rails 应用程序发送邮件重置密码时遇到了问题 密码重置邮件过去可以使用 但现在不行了 密码重置是服务器发送的唯一电子邮件 一旦我提交了我想要获取密码的电子邮件 Rails 就会显示完整的跟踪信息 Devise P
  • 防止只读文本框在 Silverlight 中变灰

    在 Silverlight 中 如何制作文本框IsReadOnly True 不会变灰 我的应用程序的灰色效果看起来很糟糕 我想禁用它 或更改其外观 颜色 Silverlight 2 中有几个选项 最简单的是使用 TextBlock 因为它
  • NumPy:计算累积中位数

    我有大小 n 的样本 我想计算每个 i 1 sample i 在 numpy 例如 我计算了每个 i 的平均值 cummean np cumsum sample np arange 1 n 1 我可以在没有循环和理解的情况下对中位数做类似的
  • 即使没有上传输入文件,Laravel mimes 验证也总是被调用(未使用必需规则)

    我仅对文件输入字段使用单一验证规则 这就是哑剧规则 如果没有上传文件 我想跳过此规则 所以我没有使用 必需 规则 但即使没有上传文件 它也始终显示 mime 类型消息 我刚刚添加了测试所需的规则 当时它显示了所需的错误消息 仅当使用 aja
  • 从 Rails 中的单表继承获取子类的列表/数组?

    我有一大堆子类 它们通过 Rails 应用程序中的单表继承从父类继承 我想要一种方法来获取从主类继承的所有子类的数组 我尝试了在另一个 SO 答案中找到的以下单链接命令 但它只返回父类 ObjectSpace each object cla
  • 为什么

    我有一个简单的 html 页面 其中有一些样式 我不明白为什么要添加一些上边距 这是来源
  • 是否可以递归刷新 CQ5/AEM apache 调度程序中的目录?

    由于多租户情况下的特定项目 我有一个调度程序设置了相当深的统计文件级别 我希望找到一种能够递归刷新目录的方法 以模仿其他租户的更浅的统计文件级别 是否有调度程序刷新命令允许我显式删除内容目录 您可以通过向调度程序发送简单的 GET 请求来自
  • FileStream 似乎没有启用

    在我们的开发数据库之一上 我尝试启用 FileStream 我运行了下面的脚本 据说它从 0 禁用变为 2 启用 Use FileStreamTest GO EXEC sp configure filestream access level
  • 实体框架视频教程[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有免费的视频教程深入讨论 EF 而不仅仅是基础知识 Thanks 下面的视频是我看过的关于实体框架
  • 为什么DATETIME可以减整数,但DATE类型不能减

    DATETIME INTEGER 和 DATE INTEGER 的关系是否一致 这执行得很好 DECLARE Yesterday DATETIME GETDATE SELECT Yesterday 1 就像这样 DECLARE Yester
  • 如何有效地检查同一个表中的两列是否是一对一映射?

    即使不同值计数相等 也并不一定意味着一对一的映射关系 SELECT COUNT DISTINCT Column A FROM MyTable SELECT COUNT DISTINCT Column B FROM MyTable A 列 1
  • 通过 json_encode 传递日语字符(UTF-8)的问题

    我在通过 json encode 将日语字符从 PHP 传输到 JavaScript 时遇到问题 这是从 csv 文件读取的原始数据 PRODUCT1 QA PRODUCT2 QA a PRODUCT3 QA 1 问题是 当通过 echo
  • 限制性安排的数量

    我正在寻找一种更快的方法来解决这个问题 假设我们有n boxes and n 弹珠 他们每个人都有不同的种类 每个盒子只能包含某种弹珠 如下例所示 并且只有一个大理石适合装在一个盒子里 请阅读编辑内容 整个算法已在下面链接的帖子中进行了描述
  • Oracle SQl Dev,如何计算2个日期之间的工作日数

    有谁知道如何计算两个日期字段之间的工作日数 我正在使用 oracle sql 开发人员 我需要找到多个开始日期和结束日期之间工作日的平均值 因此 我需要获取每条记录的天数 以便对它们进行平均 这是可以作为一行完成的事情吗 SELECT我的查
  • 将“Future[Option[Future[Option[X]]]]”转换为“Future[Option[X]]”

    如何转型Future Option Future Option X into Future Option X 如果它是一个TraversableOnce代替Option我会用未来的伴生对象 http www scala lang org a
  • Console.ReadKey 取消[重复]

    这个问题在这里已经有答案了 可能的重复 如何向 Console ReadLine 添加超时 https stackoverflow com questions 57615 how to add a timeout to console re
  • 在 Visual Studio 中编译为独立可执行文件 (.exe)

    如何在 Visual Studio 中制作独立的 exe 它只是一个简单的控制台应用程序 我认为用户不会喜欢安装一个微小的控制台应用程序 我使用 Visual Studio 命令提示符编译了一个简单的 cpp 文件 即使未安装 NET Fr
  • 在 DataTrigger 内绑定 Storyboard 动画会导致 XamlParser 崩溃

    我希望我的应用程序在每次发生特定事件时将椭圆动画到新位置 出于测试目的 我制作了一个更改视图模型属性的按钮 并且该属性绑定到触发动画的数据触发器 但后来我希望视图模型根据我尚未实现的其他事件触发它 这就是为什么我可以不要直接在视图中使用绑定