C# Windows Phone上的LayoutTransformer未更新
我正在使用定位服务和Bing地图开发WP7应用程序。我希望Bing地图控件旋转,使当前标题始终位于顶部。我知道Bing Maps控件不可能做到这一点,所以我尝试使用旋转变换来旋转整个控件 我正在使用此处找到的LayoutTransformerOnWindowsPhone程序集: 当页面加载时,控件会旋转到正确的标题,但它不会随着标题的更改而保持旋转。这是我的密码: Xaml:C# Windows Phone上的LayoutTransformer未更新,c#,silverlight,windows-phone-7,xaml,silverlight-toolkit,C#,Silverlight,Windows Phone 7,Xaml,Silverlight Toolkit,我正在使用定位服务和Bing地图开发WP7应用程序。我希望Bing地图控件旋转,使当前标题始终位于顶部。我知道Bing Maps控件不可能做到这一点,所以我尝试使用旋转变换来旋转整个控件 我正在使用此处找到的LayoutTransformerOnWindowsPhone程序集: 当页面加载时,控件会旋转到正确的标题,但它不会随着标题的更改而保持旋转。这是我的密码: Xaml: 政务司司长: if(Compass.IsSupported) { _指南针=新指南针{TimeBetweenUpd
政务司司长:
if(Compass.IsSupported)
{
_指南针=新指南针{TimeBetweenUpdates=TimeSpan.From毫秒(500)};
_compass.CurrentValueChanged+=新事件处理程序(compass\u CurrentValueChanged);
_compass.Start();
}
无效罗盘_值已更改(对象发送器、传感器读取事件参数e)
{
Dispatcher.BeginInvoke(()=>UpdateUI(即SensorReading));
}
私有无效更新(CompasReading CompasReading)
{
_currentHeading=compassReading.TrueTHeading;
地图旋转角度=_当前航向;
}
听起来您遇到了我在第三个要点中讨论的Silverlight限制:
不幸的是,他们打破了我在这里讨论的解决方法:
因此,我介绍了TransformUpdated方法,在更新RotateTransform以获得所需效果后,您应该能够调用该方法
另外,供参考,还有另一种方法可以在某种程度上简化这一点(尽管在您的案例中没有必要),我在这里讨论:
在这里:
我希望这会有帮助!:) 谢谢你,大卫!实际上,我在mapRotation.Angle=\u currentHeading行之后调用了transformer.ApplyLayoutTransform()。工作起来很有魅力!
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<toolkit:LayoutTransformer>
<toolkit:LayoutTransformer.LayoutTransform>
<RotateTransform x:Name="mapRotation" />
</toolkit:LayoutTransformer.LayoutTransform>
<my:Map Name="map1" Margin="0,0,0,0" CredentialsProvider="xyz"/>
</toolkit:LayoutTransformer>
</Grid>
if (Compass.IsSupported)
{
_compass = new Compass {TimeBetweenUpdates = TimeSpan.FromMilliseconds(500)};
_compass.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<CompassReading>>(compass_CurrentValueChanged);
_compass.Start();
}
void compass_ValueChanged(object sender, SensorReadingEventArgs<CompassReading> e)
{
Dispatcher.BeginInvoke(() => UpdateUI(e.SensorReading));
}
private void UpdateUI(CompassReading compassReading)
{
_currentHeading = compassReading.TrueHeading;
mapRotation.Angle = _currentHeading;
}