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

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(使用前将#替换为@)

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

  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • ItemSource 中具有不同类型数据的 ListView 多行列标题

    继续this https stackoverflow com q 26712051 1997232问题 我想实现这种ListView 它应该有两件事 多行列标题 不同的数据类型通过绑定ItemsSource以不同方式显示 为了解决 1 我尝
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • Libgdx SpriteBatch.draw() 指定 4 个顶点

    我正在使用 libGdx 创建一个 2d 游戏 并尝试使用这个特殊的方法来绘制一个简单的 2d 纹理 分别指定 4 个顶点 draw Texture texture float spriteVertices int offset int l
  • 如何从代码隐藏访问ListBox动态创建的项目的属性?

    XAML
  • 如何使 WPF 应用程序在 Web 浏览器上运行

    我们有一个用 WPF 编写的现有应用程序 我们正在寻找一种迁移它的方法 以便它可以在 Web 浏览器上运行 深入研究后 我们似乎需要找到一种将代码编译为 WebAssembly 的方法 但我不确定它对于现有的完全加载的 WPF 应用程序有多
  • 先学Silverlight还是先学WPF?

    看来 Silverlight WPF 是 NET 用户界面开发的长期未来 这很棒 因为我可以看到在客户端和 Web 开发端重用 XAML 技能的优势 但看看 WPF XAML Silverlight 它们似乎是非常庞大的技术 那么从哪里开始
  • Wpf TextBlock 中的垂直文本

    是否可以垂直显示 TextBlock 中的文本 以便所有字母彼此堆叠 不使用 LayoutTransform 旋转 还没有人提到使用纯 XAML 垂直堆叠任意字符串的字母 不旋转它们 的明显而简单的方法
  • WPF - 如何从 DataGridRow 获取单元格?

    我有一个具有交替行背景颜色的数据绑定 DataGrid 我想根据单元格包含的数据对单元格进行不同的着色 我已经尝试过该线程建议的解决方案 http wpf codeplex com Thread View aspx ThreadId 511
  • 如何在 WPF 应用程序上执行异步启动?

    我在异步等待方面相当落后 所以这可能是一个 duh 问题 我正在开发一个非常小的 UI 应用程序 它使用以下命令从系统托盘运行WPF 通知图标 http www codeproject com Articles 36468 WPF Noti
  • Python 2.7从非默认目录打开多个文件(对于opencv)

    我在 64 位 win7 上使用 python 2 7 并拥有 opencv 2 4 x 当我写 cv2 imread pic 时 它会在我的默认 python 路径中打开 pic 即C Users Myname 但是我如何设法浏览不同的目
  • 强制 IDataErrorInfo 验证

    我在某个面板上有两个控件 文本框和组合框
  • 使用 ICollectionView 过滤 ObservableCollection

    I have ObservableCollection绑定到dataGrid现在我想过滤我看到需要使用的呈现数据ICollectionView但我不知道如何添加ICollectionView和我的MVVM图案 我的代码简化如下 public
  • 如何知道python运行脚本的路径?

    sys arg 0 给我 python 脚本 例如 python hello py 返回 sys arg 0 的 hello py 但我需要知道 hello py 位于完整路径中的位置 我怎样才能用Python做到这一点 os path a
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 主从视图中聚合详细信息值

    我在一些自定义实体中有主从关系 假设我有以下结构 class Master INotifyPropertyChanged public int Id get set property changed implementation publi
  • WPFToolkit.Extended - 工具在哪里?

    我已采取的步骤 我正在使用 NET 4 0 我得codeplex http wpftoolkit codeplex com releases view 84227并下载了第一个 扩展 WPF 工具包二进制文件 2 号将此文件 Extende

随机推荐

  • 为什么 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