删除故事板但保留动画价值?

2024-01-27

如何在 XAML 中删除故事板(即 DataTrigger 中的删除故事板操作)但保留动画值。类似于可动画化.BeginAnimation http://msdn.microsoft.com/en-us/library/ms590761.aspx:

如果动画的 BeginTime 为 null,则将删除所有当前动画并保留该属性的当前值。


RemoveStoryboard 的主要用途是删除动画值并将它们设置回非动画状态。在大多数情况下,您可以将调用切换到 PauseStoryboard 或 StopStoryboard,具体取决于具体情况。唯一的例外是当您需要释放故事板所持有的资源或将其用于其他目的时。

如果您确实想要删除故事板并保留属性值,则必须直接在属性上设置动画值。这可以通过将每个值设置为动画值来完成,如下所示:

void CopyAnimatedValuesToLocalValues(DependencyObject obj)
{
  // Recurse down tree
  for(int i=0; i<VisualTreeHelper.GetChildrenCount(obj); i++)
    CopyAnimatedValuesToLocalValues(VisualTreeHelper.GetChild(obj, i));

  var enumerator = obj.GetLocalValueEnumerator();
  while(enumerator.MoveNext())
  {
    var prop = enumerator.Current.Property;
    var value = enumerator.Current.Value as Freezable;

    // Recurse into eg. brushes that may be set by storyboard, as long as they aren't frozen
    if(value!=null && !value.IsFrozen)
      CopyAnimatedValuesToLocalValues(value);

    // *** This is the key bit of code ***
    if(DependencyPropertyHelper.GetValueSource(obj, prop).IsAnimated)
      obj.SetValue(prop, obj.GetValue(prop));

  }
}

在删除故事板以复制动画值之前调用此方法。

Edit有人评论说这段代码可能是不必要的,因为使用 BeginTime=null 调用 BeginAnimation 可以达到类似的效果。

虽然 BeginAnimation 与 BeginTime=null 确实使值看起来好像被复制到本地,但稍后调用 RemoveStoryboard 将导致值恢复。这是因为 BeginAnimation 和 BeginTime=null 会导致先前的动画在新动画开始之前保留其值,但不会影响本地值。

上面的代码实际上覆盖了本地值,因此可以删除所有动画,并且对象仍将具有其新值。因此,如果您确实想调用RemoveStoryboard并仍然保留您的值,您将需要我上面编写的代码或类似的代码。

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

删除故事板但保留动画价值? 的相关文章

  • ScrollViewer.ScrollToBottom 未完全滚动

    我创建了一个 WPF 控件 它允许我正在开发的应用程序的用户轻松选择要连接的 SQL Server 在控件上 存在三种不同类别的 SQL Server 本地 最近和网络上的更多服务器 Local 运行应用程序的计算机上的 SQL Serve
  • 当绑定值为 null 时出现 WPF 日期选择器验证错误

    我有一个 WPF 应用程序 其中使用绑定到实体框架 带有 SQL Server 实体的日期字段的日期选择器 我将其绑定如下
  • Prism / MEF:如何在不硬编码区域名称的情况下注册ViewWithRegion

    我们正在构建一个 WPF Prism 应用程序 我们有不同的开发人员从事不同的模块项目 并且多个模块被注入到主应用程序外壳中 主应用程序也是一个单独的项目 我们还希望能够在不同的应用程序中使用这些模块 我们不希望在每个应用程序中都使用相同的
  • 如何在 C# 中将 Wpf BitmapSource 转换为 byte[] [重复]

    这个问题在这里已经有答案了 可能的重复 WPF 图像到字节 https stackoverflow com questions 553611 wpf image to byte 相对于此 https stackoverflow com qu
  • App.Config 和 Web.Config 之间的区别?

    当在 wpf 中构建桌面应用程序时 您可以阅读问题文档并在人们的答案引用 web config 时安全地替换 app config 吗 如果是这样 您是否需要注意任何明显的陷阱 tnx 阅读文档 http msdn microsoft co
  • 带有复选框的 WPF ListBox:在选中之前选择复选框

    Problem 我有一个列表框 其中列表框是复选框 第一次单击时 复选框将被选中并选中 第二次单击时 仅设置复选框 人们可以使用箭头键重新选择不同的复选框 我的目标是 首先选择复选框 然后再检查 再次单击它 从而消除对箭头键的需要 Goal
  • 具有自定义镶边的 WPF 窗口在右侧和底部有不需要的轮廓

    我使用 Microsoft Windows Shell dll 创建了带有自定义镶边的 WPF 窗口 这是代码
  • 在 WPF 树视图中获取 FullPath?

    如果我以编程方式创建 WPF TreeView 例如 TreeView treeView lt added in the designer TreeViewItem rootNode new TreeViewItem rootNode He
  • 如何默认显示动画控件

    在mathematica中这个简单的控制对象中 如下所示 Control x 0 1 我们必须将鼠标指针移至对象的右上角才能获得名为 显示动画控件 的提示 然后单击它以查看播放 前进等动画控件 有没有办法通过设置一些选项来默认情况下打开所有
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • 在 MVVM 中设置可见性的最佳方法

    In my View我有三个对象 其中一个在任何给定时间都是可见的 在我的Model我有一个枚举来代表这三个状态 我应该如何实施我的ViewModel a 为每个对象的可见性创建一个布尔值 并将每个对象绑定到该布尔值 使用 bool gt
  • C# - 继承WPF布局 - Window from Window

    我的 Window 继承有问题 我不明白问题是什么 我认为 我的布局 MediaLibrary xaml 必须继承 MainWindow 但我不知道该怎么做 有2类 主窗口 xaml
  • 如何正确删除动画集中引用的 Raphael SVG 元素?

    我有一组动画 Raphael SVG 元素 我正在通过用户发起的 ajax 调用添加新元素并删除旧元素 我 set push 新元素 但因为我需要删除的元素通常不是集合中的最后一个元素 所以我使用 element remove 而不是 se
  • 如何将绑定字符串格式设置到所有 DataGridTextColumn 控件?

    这是我的 DataGridTextColumn 控件之一 如下所示
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • WPF 中处理系统关闭

    如何在 WPF 中重写 WndProc 当我的窗口关闭时 我尝试检查我正在使用的文件是否被修改 如果是 我必须提示用户 你想保存更改吗 消息 然后关闭正在使用的文件和窗口 但是 当我的窗口仍然打开时 我无法处理用户重新启动 关闭 注销的情况
  • 获取 TreeView 中子节点的 SelectedIndex

    我目前正在使用 C 开发一个 wpf 项目 我创建了一个树视图 其中包含父节点和子节点 我想知道是否有办法获取用户单击的子节点的索引 类似于使用组合框时的 SelectedIndex 我尝试过各种方法 例如 int val TreeView
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾

随机推荐

  • MediaRecorder 仅以 15 FPS 录制

    我正在制作一个相机应用程序 但遇到问题 我无法设置视频的帧速率 我的代码如下所示 我将帧速率设置为 30 但它忽略它并以 15 进行记录 我知道在某些设备上它没有设置实际帧速率 而是设置建议的帧速率 并且手机根据照明来决定 但我记录了在室外
  • 为什么 runState 签名只有 state 参数?

    一个现实生活中的例子 如果我心情很好 良好状态 当经理问我有关估算时 我给了他一个可靠的答案 但他敢这样做3次吗in a row 中间没有一些免费零食 我的情绪发生了变化 我变得 糟糕的状态 接下来的 3 次他走近时 我要求他不要用任何废话
  • Visual Studio 设计视图包含黄色警告图标?

    我在 Visual Studio 中创建了一个 WPF 项目 其中包含MainWindow 这通过 XAML 导入 其他用户控件 这MainWindow显示警告图标和以下文本 不幸的是我没有英文翻译 但它的意思是这样的 本文档包含一个或多个
  • 如何在 R 中创建列表向量?

    我有一个列表 tmpList 如下所示 op 1 empty termset termset field 1 entry termset 2 termset 2 explode 1 Y 这是一个列表 里面有一个列表 如果我将此列表添加到向量
  • TopShelf、Ninject 和 EF 代码优先的 Ninject 范围问题

    我目前正在使用 TopShelf 和 Ninject 来创建 Windows 服务 我有以下代码来使用 TopShelf 设置 Windows 服务 static void Main string args using IKernel ke
  • 无法在使用 GCM 的设备上接收消息

    我已按照 google 的说明启动 gcm 服务器和客户端 我的问题是虽然我从服务器获得了成功的 gcm MulticastResult multicast id 8287827393174436535 总计 1 成功 1 失败 0 can
  • 如何复制 WPF FlowDocument InlineUIContainer 内容?

    我有一个 WPF FlowDocument 其中有一些 InlineUIContainer 这些是简单的 InlineUIContainer 其中包含一个样式化按钮 其中 Button Content 中包含一些文本 当我将包含按钮的文本和
  • 类似 C++ LINQ 的迭代器操作

    被Linq玷污了 我不愿意放弃它 然而 对于某些事情我只需要使用 C 作为 linq 使用者 即对我而言 linq 的真正优势不在于表达式树 操作起来很复杂 而在于我可以轻松地混合和匹配各种函数 做相当于 Where Select and
  • 当我的 do 不为空时,为什么会出现“Empty do”错误?

    我正在尝试创建一个菜单 该菜单根据用户输入提供输出 但是 即使我有代码可以在其下面执行操作 我也会收到一个空的 do 错误 我错过了什么吗 main IO main do contents lt readFile spa txt let s
  • 语法怪癖或者为什么是有效的 python

    在 python 2 6 中 为什么以下行有效 my line foo bar 如果这是有效的 为什么不是以下内容 my list 1 2 第一个示例是字符串连接 但是 以下内容也无效 感谢上帝 foo foo bar bar foo ba
  • Android Studio 在 Linux 上运行模拟器失败

    我尝试从 Android Studio 2 3 3 在 Linux 机器上 运行 Android 模拟器 但如果失败且没有错误 我尝试使用 x86 图像 API 24 所以我尝试从控制台运行 opt android android sdk
  • Retrofit2 处理状态码 200 但 json 结构与 datamodel 类不同时的情况

    我正在使用 Retrofit2 和RxJava2CallAdapterFactory 我使用的 API 返回的状态代码始终为 200 对于成功和响应 JSON 字符串 JSON 结构完全不同 由于状态代码始终为 200 因此始终会调用 on
  • 从 Visual Studio 2013 的面板中复制手绘图

    我想在 Visual Studio 上以表单 图片框 徒手绘制 并在另一个面板 图片框上复制相同的图形 我绘制的 而且它们不应该是形成一条线的点 而是一条连续的线 请帮忙 using System using System Collecti
  • 如何设置通量比作为约束?

    在某些数据集中 我有时会观察到固定的通量比 我希望将其纳入我的模拟中 我怎样才能在 CBMPy 中做到这一点 例如 我的模型来自here http bigg ucsd edu models e coli core现在希望将琥珀酸流出和丙酮酸
  • XPath:获取节点中最后一个同级的值

    我正在尝试创建一个在 MS InfoPath 中使用的 XPath 表达式 以便检索节点中最后一个同级的值 希望我正确地表达了这个问题 因为我几乎没有使用过 XPath 我需要识别 RepeaterGroup 节点内 NamesEval 节
  • C# 正则表达式:删除前导和尾随双引号 (")

    如果我有如下所示的字符串 删除 可选 前导和尾随双引号的正则表达式是什么 为了获得额外的积分 它是否还可以删除引号之外的任何可选空格 string input quoted string gt quoted string string in
  • ARRAY>> 类型的值无法分配给 M.preferences_testing,其类型为 STRING

    出现以下错误 ARRAY gt 类型的值无法分配给 M preferences testing 其类型为 STRING MERGE table1 M USING select id ARRAY SELECT AS STRUCT value
  • How to show PDF from NSData in Swift - 如何将 PDF 保存到文档文件夹 Swift - 如何在 Swift 中通过 WebView 显示保存的 NSData 中的 PDF

    我有一个以 NSData 形式从服务器中提取的 PDF 现在我需要显示它 我已经广泛寻找解决方案 但没有找到任何可以弥合原始 NSData 和实际保存或显示 PDF 之间差距的东西 我尝试过这个 但现在我不知道如何保存或显示 let cfD
  • 添加额外的 java 文件到 playframework 类路径

    我有一个与我的 android 项目共享模型的项目 我有一个单独的 eclipse 项目 仅用于模型和其他共享代码 我将其作为 Eclipse 中的依赖项添加到我的 Play 项目中 在eclipse中 play编译并启动没有问题 但是 我
  • 删除故事板但保留动画价值?

    如何在 XAML 中删除故事板 即 DataTrigger 中的删除故事板操作 但保留动画值 类似于可动画化 BeginAnimation http msdn microsoft com en us library ms590761 asp