像在画布上绘制一样对路径进行动画处理

2023-11-25

我是 WPF 的新手,请指导我解决这个问题的正确方向。

我构建了一个 WPF 应用程序,其中包含路线图视图控件的所有功能。 IE。路线图可以使用鼠标、键盘和提供的控件进行放大/缩小、向各个方向平移。我已将道路映射为使用 Expression Blend 绘制的路径。

目前,我正在寻找一种对选定道路进行动画处理的方法,就像它是用铅笔/钢笔/记号笔绘制的一样。这可能吗?到目前为止,我已经能够为路径的不透明度和颜色设置动画。我已经搜索了很多这个功能但没有运气。可能是我没有搜索正确的术语。我希望你们中的某个人能够对这个问题有所了解。

提前致谢。抱歉,如果我听起来很疯狂:)编程是我疯狂的方式:D


TL;DR:我们利用PointAnimationUsingPath。我们为路径上的一个点设置动画并构建一个Clip点移动时的几何形状。


完整答案:

我首先绘制一个样本Path in a Grid出于演示目的。把实际的Path资源中的数据,因为我们稍后会重复使用它。

<Grid>
    <Grid.Resources>
        <PathGeometry x:Key="path">
            <PathFigure>
                <BezierSegment Point1="10 30" Point2="100 100" Point3="200 10" />
            </PathFigure>
        </PathGeometry>
    </Grid.Resources>
    <Path x:Name="myPath" StrokeThickness="5" Stroke="Black" Data="{StaticResource path}" />
</Grid>

然后我定义一个空的Clip几何为Path:

<Path.Clip>
    <GeometryGroup x:Name="geometryGroup" FillRule="Nonzero"/>
</Path.Clip>

到目前为止,Path消失是因为它被剪切到一个空的几何体。我们剩下要做的就是逐步将点添加回此剪切几何体中以显示Path。 为此,我们需要一个动画对象。我建议创建一个FrameworkPoint用于演示:

public class FrameworkPoint : FrameworkElement {
    public static DependencyProperty CenterProperty = DependencyProperty.RegisterAttached("Center", typeof(Point), typeof(FrameworkPoint));
    public Point Center { get => (Point)GetValue(CenterProperty); set => SetValue(CenterProperty, value); }

    public event Action<Point> CoordinatesChanged;

    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) {
        base.OnPropertyChanged(e);
        if (e.Property == CenterProperty) {
            CoordinatesChanged?.Invoke(Center);
        }
    }
}

这是一个只有一个类型属性的对象Point,这个属性是可动画的。让我们在中添加我们的(不可见的)点Grid并在我们的Path:

<local:FrameworkPoint x:Name="myPoint">
    <local:FrameworkPoint.Triggers>
        <EventTrigger RoutedEvent="Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <PointAnimationUsingPath Duration="00:00:10"
                                             Storyboard.TargetProperty="Center"
                                             PathGeometry="{StaticResource path}"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </local:FrameworkPoint.Triggers>
</local:FrameworkPoint>

在启动时,FrameworkPoint会无形中跟随Path在指定的时间(10 秒)内。剩下要做的就是建立我们的Clip当点移动时:

public partial class MainWindow : Window {
    public MainWindow() {
        InitializeComponent();
        myPoint.CoordinatesChanged += MyPoint_CoordinatesChanged;
    }

    private void MyPoint_CoordinatesChanged(Point obj) {
        geometryGroup.Children.Add(new EllipseGeometry(obj, 5, 5));
    }
}

这不会为快速动画提供完美的结果,因为采样不够好,但它可以给您带来想法!

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

像在画布上绘制一样对路径进行动画处理 的相关文章

  • html canvas动画卡顿

    谁能解释为什么提供的画布动画断断续续 我创建了一个测试存根来演示该问题 我在桌面上的 FF Chrome IE 以及 Android 上的 FF 和 Chrome 中看到了卡顿现象 口吃是由于垃圾收集造成的吗 似乎 raf 在每次调用时都会
  • WPF DataGrid 验证/绑定模式错误

    我创建了一个非常简单的新项目 仅测试 Microsoft WPF DataGrid 行为 不涉及其他 我只使用标准的 DataGrid
  • 如何从WPF中的数据网格中获取单元格的值? [复制]

    这个问题在这里已经有答案了 可能的重复 从 DataGrid 中选择 DataGridCell https stackoverflow com questions 9978119 select datagridcell from datag
  • 自动布局、UIDynamics 和动画

    我对自动布局还很陌生 并且对如何为视图设置动画感到困惑 我读了很多 我知道你必须遵守限制 编辑它 然后包装layoutIfNeeded in an UIView动画块 但当真正要做的时候 我却有点失落 我很乐意有人能向我解释如何做这个动画
  • 如何从 XAML 设置 WPF 用户控件属性?

    我试图从 XAML 设置同一用户控件的多个实例的 fill 属性 以便区分它们 我在控件的 C 代码隐藏中使用依赖属性 并在实例化控件时在 XAML 中引用该属性 这是我尝试过的简化示例 首先是用户控件的 XAML
  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • 如何销毁或分离 CollectionView

    我观察到 WPF ItemsControls 的奇怪行为 如果将 ItemsSource 设置为实现INotifyCollectionChanged然后设置ItemsSource为空 则CollectionView创建它是为了向 Items
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 依赖属性回调不起作用

    我有以下代码 private static readonly DependencyProperty IDProperty DependencyProperty Register ID typeof int typeof DetailData
  • NSTextField 弹跳截断的文本而不是换行

    我想知道是否有一种简单的方法来 弹跳 或滚动NSTextField文本太长而无法显示 例如 lt scroll This is a rather large pi ece of text 因此 在此示例中 文本将滚动到末尾 显示消息的其余部
  • 如何在 TypeScript React 项目中使用 eslint import 插件启用绝对路径别名?

    我已经安装了eslint plugin import到我的项目 我的目标是使用 import no relative parent imports error 设置禁止在我的项目中进行相对导入以增强可读性 但是 此设置会在我的项目中产生错误
  • ListBox.ScrollIntoView() 似乎在 WP7 中不起作用

    每当将新项目添加到项目源时 我想将列表框滚动条移动到底部 但是ScrollIntoView 如果我向它传递对新添加项目的引用或其索引 它似乎不会执行任何操作 有没有人让它工作 或者对如何将列表框向下滚动到底部有任何其他建议 一些代码 voi
  • 使用路径=。和绑定内的转换器

    我无法为 TreeViewItems 定义触发器 我相信这只是一些语法问题 但我不知道还要写什么 这是触发器
  • 使用 matplotlib 在 python3 中对多个形状进行动画处理

    尝试在 python3 中使用 matplotlib 动画函数同时对多个对象进行动画处理 下面写的代码是我到目前为止的位置 我能够创建多个对象并将它们显示在图中 我通过使用包含矩形补丁函数的 for 循环来完成此操作 从这里开始 我希望通过
  • TabItem ContenTemplate 上 IsMouseOver 的触发器

    我对 TabItem 样式有疑问 也许你们中的某个人可以帮助我 遵循有问题的风格
  • wpf工具包折线图,无点且具有不同的线条颜色

    我有一些图表 我想动态添加没有数据点的 LineSeries 只是带有一些自定义颜色的线条 我发现隐藏数据点的唯一方法是 Style style new Style typeof LineDataPoint style Setters Ad
  • python sys.path 故障排除

    python 文档位于http docs python org library sys html http docs python org library sys html比如说sys path is 从环境变量 PYTHONPATH 以及
  • 强制 protobuf-net 忽略 IEnumerable/ICollection 接口

    如何让 protobuf net v2 忽略我的类实现 ICollection IEnumerable 等的事实 对于这个特定场景 我只希望序列化标记为 ProtoMember 的字段 我目前正在从使用 protobuf net v1 转换
  • 通过 RDP 使用 WPF 的 Direct2d

    我正在开发一个 C 应用程序 它使用 SharpDx 通过 Direct2d 渲染地图 该地图与 D3DImage 一起显示在 WPF 主机上 在本地计算机上 一切正常 但当我尝试通过远程桌面连接时 D3DImage 会丢失其后备缓冲区 并
  • 从子域中的 ../ 路径

    假设我创建了一个子域 http subdomain mydomain com http subdomain mydomain com 最初是在这个网址 http mydomain com subfolder folder http mydo

随机推荐

  • 为什么 Google HTTPS -> HTTP 的 Referer 标头没有被删除?

    客户不应该包括Referer如果引用页面是使用安全协议传输的 则 非安全 HTTP 请求中的标头字段 https www rfc editor org rfc rfc2616 section 15 1 3 根据标准 https google
  • 从Linux内核访问物理内存

    我们可以通过一些内核代码访问任何物理内存吗 因为 我编写了一个只有 init module 和 exit module 的设备驱动程序 代码如下 int init module void unsigned char p unsigned c
  • Font Awesome 在 Firefox 和 IE 中不工作

    我遇到了 WordPress 网站中包含的很棒的字体问题 在 Firefox 和 IE 中 图标根本不会显示 但在 Chrome 和 Safari 中它工作正常 我找到了 解决方案 说我需要一个包含某些内容的 htaccess 来为这些浏览
  • 字典列表到xlwt

    我有一个清单字典我想使用它将其转换为Excelxlwt 我是 xlwt 的新手 你能帮助我吗 我使用它作为接收 dict 列表并将其转换为 excel 然后返回的函数 我有这个字典列表 id u 1 name u Jeff id u 2 n
  • 有没有办法在 Tkinter 中使用功能区工具栏?

    我还没有决定我的下一个项目使用什么语言和工具 我喜欢使用 python 但我想实现功能区工具栏 Tk 中已经完成了一些工作 http www ellogon org petasis bibliography Tcl2010 TkRibbon
  • 如何将多个列“内爆”(去规范化/连接)为单个列?

    我有一个查询 输出如下 F KEY EV OTHER COLUMN 100 1 100 2 150 2 100 3 150 4 我确信我已经看到了一个聚合函数可以将其转变为 使用GROUP BY F KEY 变成这样的东西
  • 将 grid.arrange() 绘图保存到文件

    我正在尝试使用绘制多个图ggplot2 使用排列它们grid arrange 由于我设法找到了描述我所遇到的确切问题的人 因此我引用了问题描述link 当我使用ggsave after grid arrange i e grid arran
  • 具有相同路由和相同组件的两个路径 - Vue js

    我有两条具有相同组件的路径 如下所示 loc host 应匹配 usa host loc sublocation host 应匹配 usa washington host 如何在 vue js 中使用单个命名路由来实现这一点 您可以使用路径
  • Java:如何在属性文件中写入“阿拉伯语”?

    我想在消息资源包 属性 文件中写入 阿拉伯语 但是当我尝试保存它时 出现此错误 保存无法完成 某些字符无法使用 ISO 85591 1 字符编码进行映射 更改编码或删除字符 有人可以指导一下吗 我想写 global username 我应该
  • 如何记录 C# dll

    如何编写一个类 以便在其他项目中引用该 dll 的人可以看到属性和方法描述 Description My age in years attribute public int Age get return 0 set 不起作用 也不起作用
  • bash 脚本在获取时会产生不同的结果

    您能帮助我吗 为什么这个脚本在源代码 甚至直接在控制台上 时有效 而在脚本上不起作用 我已经检查过 无论如何我在 bin 中使用相同的 bash 并且始终使用 4 4 19 1 release 用 BASH VERSION 此外 我尝试删除
  • 如何在 Dart 命令行 HttpClient 中执行 POST

    我正在努力组装一个能够执行 http POST 的 Dart 命令行客户端 我知道我不能使用 dart html 库而必须使用 dart io 开头看起来很简单 HttpClient client new HttpClient client
  • 自动将大括号添加到 java 代码库中的所有 if/else/for/while 等

    我想减少大型遗留java代码库中声纳违规的数量 似乎 快速获胜 是将所有这些条件语句更新为具有大括号 这似乎是一件容易做的事情 我不明白为什么它不能轻易自动化 有人知道可以执行这样的批量操作的工具吗 或者为什么在我自己花时间写一些东西之前做
  • 使用 sas 获取数据步骤中的行号

    有没有办法进行过度分区来获取 sas 上的行号 在 sql 中我会这样 Select region company ROW NUMBER OVER PARTITION BY region ORDER BY Name From company
  • 更改 UIAlertController 中的标题颜色

    我有两个按钮 但我只想将其中一个更改为红色 当我使用下面的功能时它全部改变为red 我只想改变一个按钮的颜色 我该怎么做 alertController view tintColor UIColor redColor let alertCo
  • C++ 隐式转换运算符优先级

    编辑 根据迈克 西摩的评论 我替换了operator std string const with operator char const 并相应地改变了实施 这允许隐式转换 但是 由于某种原因 unsigned long int 运算符优先
  • 超级构造函数如果没有超类?

    我发现了一个这样的类 public class Computer implements Serializable private static final long serialVersionUID 1L public Computer s
  • WinForms 数据绑定 - 绑定到列表中的对象

    我需要一些关于 WinForms 数据绑定的帮助 指导 但我似乎无法让 Google 帮助我解决这个问题 这是我的场景 考虑以下与我需要的类似的类 public class Car public string Name get set pu
  • WPF:文本框文本未更新

    我有一个正在使用的用户控件DataTemplate this UserControl包含一个TextBox与Value属性 声明为DependencyProperty of my UserControl 在数据模板中我绑定了这个Value财
  • 像在画布上绘制一样对路径进行动画处理

    我是 WPF 的新手 请指导我解决这个问题的正确方向 我构建了一个 WPF 应用程序 其中包含路线图视图控件的所有功能 IE 路线图可以使用鼠标 键盘和提供的控件进行放大 缩小 向各个方向平移 我已将道路映射为使用 Expression B