xaml - 为 Metro 应用程序的 Bing map 上的标记图钉设置动画

标签 xaml windows-8 windows-runtime bing-maps

我有一个 Bing map 控件,我想为 map 上绘制的图钉的位置设置动画。

理想情况下,我想编写这样的代码:

// Image myPin = some Image on the map layer;

var sb = new Storyboard();
var duration = DurationHelper.FromTimeSpan(System.TimeSpan.FromMilliseconds(1000));
sb.Duration = duration;

LocationAnimation ani = new LocationAnimation();
ani.To = new Location(33.3, 11.1); // destination lat, lng
ani.Duration = duration;

sb.Children.Add(ani);
Storyboard.SetTarget(ani, myPin);
Storyboard.SetTargetProperty(ani, "MapLayer.Position");

Resources.Add("moveMyPin", sb);
sb.Begin();

当然没有LocationAnimation框架中的类。有几个类似的:PointAnimationPoint 一起使用输入,而 DoubleAnimation与个人合作 double值(value)观。

我以为我必须实现我的 Timeline -派生类,但到目前为止我发现的文档在这方面没有帮助,我不知道从哪里开始。

如何为没有 *Animation 类准备好的属性设置动画?我错过了什么吗?

更新 : 我想我可以做类似的事情

// let aniX and aniY be two DoubleAnimation objects
StoryBoard.SetTargetProperty(aniX, "(MapLayer.Position).Latitude")
StoryBoard.SetTargetProperty(aniY, "(MapLayer.Position).Longitude")

但现在我遇到了另一个问题,因为我看不到如何为附加属性设置动画,并且总是得到一个异常,比如“无法解析 TargetProperty (MapLayer.Position).Latitude on specified object”。

所以我想现在的问题变成了:如何为附加属性指定属性路径?

进一步更新 :我可能在“SetTargetProperty”这件事上走错了路,因为这会产生依赖动画(请参阅评论中的链接)。是否有更好的方法将标记针设置为坐标目标?

更新 3 :正如 Jared 指出的,我可以尝试为 RenderTransform 设置动画。 ,或者使用过渡来实现我的结果。我已经走了这条路,这似乎不是我的解决方案。这是我发现的:
  • 使用 RepositionThemeAnimation ,看来我必须给出大头针的新像素位置。这有几个原因:首先,我知道引脚的纬度/经度目的地,但必须计算出投影(据我所知,没有公共(public)接口(interface)可以使用投影)。其次,投影本身可以随着 map 的缩放/平移而改变。动画结束时的像素目标不能与初始像素目标相同。在我的场景中,这是一个主要问题,因为在动画发生时 map 很可能正在移动。
  • 使用 RepositionThemeTransition所有奇怪的像素/投影问题都消失了。到目前为止,这是我能够看到我期望的动画的唯一方法。我只是设置了转换并设置了标签的新纬度/经度位置(通过 MapLayer.SetPosition)。但它有两个主要问题。我无法设置动画的持续时间(也无法设置缓动功能)。最重要的是,当引脚到达最终位置时,我看不到任何执行代码的方法。
  • 最佳答案

    附加属性可以设置动画,但您必须将它们的名称括在括号中。在此处查看示例:

    http://www.charlespetzold.com/blog/2007/09/080231.html

    但是,我相信这仅适用于设置整个值(位置),可能不适用于子属性(纬度和经度)。

    我想知道您是否可以提供有关您正在尝试做的事情的更多信息。这是临时动画吗?即,您是否希望图钉在入口或离开时进行动画处理?如果是这样,您可以只在 RenderTransform X 和 Y 上做一个动画。您实际上不会更改图钉的位置,但您可以使用 RenderTransform 临时更改它的绘制位置。

    更好的是,您也许可以摆脱现在内置于框架中的免费动画。您甚至不需要 Storyboard来使用它们,只需将它们设置在元素上,如下所示:

    <Button Content="Transitioning Button">
         <Button.Transitions>
             <TransitionCollection> 
                 <EntranceThemeTransition/>
             </TransitionCollection>
         </Button.Transitions>
    </Button>
    

    有关动画库的更多示例,甚至许多动画的视频预览,请参阅:

    http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh452703.aspx

    关于xaml - 为 Metro 应用程序的 Bing map 上的标记图钉设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10753278/

    相关文章:

    c# - 共享 Windows Phone 运行时组件

    c# - XML、LINQ 和 XDocument.Save 问题

    wpf - 选择行时突出显示 DataGrid 中的 RowDetails

    c# - 当按下按钮时如何从 Collection View 中获取相应的对象?

    c#-4.0 - 带有 WebAuthenticationBroker 的 Dropbox API

    CSS 显示 html 内容,如 Windows 8 应用程序网格

    xaml - 有没有办法在 Metro 风格的应用程序中为 Margin 属性设置动画

    c# - WinRTXAML 工具包 BindableSelection 无法正常工作

    c# - 无法将类型为 '%0' 的实例添加到 Windows Phone 8.1 DatePicker 中类型为 '%1' 的集合中

    xaml - 弹出按钮位于SecondaryCommands 后面