<Page x:Class="Microsoft.Samples.PerFrameAnimations.FrameIndependentFollowExample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas x:Name="containerCanvas" Background="Transparent">
<Rectangle x:Name="followRectangle" Canvas.Left="0" Canvas.Top="0"
Fill="red" Width="50" Height="50" />
</Canvas>
</Page>
//File:Window.xaml.vb
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Documents
Imports System.Windows.Media
Imports System.Windows.Navigation
Imports System.Windows.Shapes
Imports System.Windows.Media.Animation
Namespace Microsoft.Samples.PerFrameAnimations
Public Partial Class FrameIndependentFollowExample
Inherits Page
Private _rectangleVelocity As New Vector(0, 0)
Private _lastMousePosition As New Point(500, 500)
Private _lastRender As TimeSpan
Public Sub New()
MyBase.New()
_lastRender = TimeSpan.FromTicks(DateTime.Now.Ticks)
AddHandler CompositionTarget.Rendering, AddressOf UpdateRectangle
End Sub
Private Sub UpdateRectangle(sender As Object, e As EventArgs)
Dim renderArgs As RenderingEventArgs = DirectCast(e, RenderingEventArgs)
Dim deltaTime As [Double] = (renderArgs.RenderingTime - _lastRender).TotalSeconds
_lastRender = renderArgs.RenderingTime
Dim location As New Point(0, 0)
Dim toMouse As Vector = _lastMousePosition - location
Dim followForce As Double = 1.0
_rectangleVelocity += toMouse * followForce
Dim drag As Double = 0.9
_rectangleVelocity *= drag
location += _rectangleVelocity * deltaTime
Canvas.SetLeft(followRectangle, location.X)
Canvas.SetTop(followRectangle, location.Y)
End Sub
End Class
End Namespace