1 public myCompass()
2 {
3 InitializeComponent();
4 if (Compass.IsSupported)
5 {
6 compass = new Compass();
7 compass.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<CompassReading>>(compass_CurrentValueChanged);
8 compass.TimeBetweenUpdates = TimeSpan.FromMilliseconds(400);
9 compass.Start();
10 }
11 else
12 MessageBox.Show("设备不支持电子罗盘");
13 }
14
15 void compass_CurrentValueChanged(object sender, SensorReadingEventArgs<CompassReading> e)
16 {
17 if (compass.IsDataValid)
18 {
19
20 Deployment.Current.Dispatcher.BeginInvoke(() =>
21 {
22
23 HeadingAccuracy = e.SensorReading.HeadingAccuracy;
24
25 if (!Calibrating)
26 {
27 TrueHeading = e.SensorReading.TrueHeading;
28 if ((180 <= TrueHeading) && (TrueHeading <= 360))
29 ReciprocalHeading = TrueHeading - 180;
30 else
31 ReciprocalHeading = TrueHeading + 180;
32 CompassFace1.RenderTransformOrigin = new Point(0.5, 0.5);
33 transform.Angle = 360 - TrueHeading;
34 CompassFace1.RenderTransform = transform;
35
36 }
37
38 });
39 }
40 }
41 }
42 }