This is the second time I provide a WPF solution for the winforms problem.
Just copy and paste my code into a file -> new project -> WPF application and see the results for yourself.
Also consider how simple this code is (I use random values, so you can remove them and adapt to your needs).
The drawing I used (the <Path/> part in XAML) is not enough for calibration. I have just drawn this Path, and I'm too lazy to create a new one. You must create a new drawing (I recommend using Expression Blend). But you can see what Rotation is applied and how fast it works.
using System; using System.Threading; using System.Windows; using System.ComponentModel; namespace WpfApplication4 { public partial class Window2 { public Window2() { InitializeComponent(); DataContext = new ViewModel(); } } public class ViewModel: INotifyPropertyChanged { private double _value; public double Value { get { return _value; } set { _value = value; NotifyPropertyChange("Value"); } } private int _speed = 100; public int Speed { get { return _speed; } set { _speed = value; NotifyPropertyChange("Speed"); Timer.Change(0, value); } } public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChange(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } private System.Threading.Timer Timer; public ViewModel() { Rnd = new Random(); Timer = new Timer(x => Timer_Tick(), null, 0, Speed); } private void Timer_Tick() { Application.Current.Dispatcher.BeginInvoke((Action) (NewValue)); } private Random Rnd; private void NewValue() { Value = Value + (Rnd.Next(20) - 10); } } }
XAML:
<Window x:Class="WpfApplication4.Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window2" WindowState="Maximized"> <DockPanel> <StackPanel DockPanel.Dock="Top"> <TextBlock Text="Delay (MS):" Margin="2"/> <Slider Width="200" Minimum="100" SmallChange="1" LargeChange="10" Maximum="1500" Value="{Binding Speed}" Margin="2"/> <TextBlock Text="Current Value:" Margin="2"/> <TextBox Text="{Binding Value}" Margin="2"/> </StackPanel> <Path Data="M0.95991516,0.5 L73.257382,1.866724 90.763535,1.866724 90.763535,90.822725 66.430534,90.822725 66.430534,26.075016 0.5,24.828653 z" Fill="#FF506077" RenderTransformOrigin="0.861209625003783,0.507482926584064" Stretch="Fill" Stroke="Black"> <Path.LayoutTransform> <TransformGroup> <ScaleTransform ScaleY="1" ScaleX="-1"/> <SkewTransform AngleY="0" AngleX="0"/> <RotateTransform Angle="{Binding Value}" x:Name="Rotation"/> <TranslateTransform/> </TransformGroup> </Path.LayoutTransform> </Path> </DockPanel> </Window>
Federico berasategui
source share