C# Windows Phone上的LayoutTransformer未更新

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

我正在使用定位服务和Bing地图开发WP7应用程序。我希望Bing地图控件旋转,使当前标题始终位于顶部。我知道Bing Maps控件不可能做到这一点,所以我尝试使用旋转变换来旋转整个控件

我正在使用此处找到的LayoutTransformerOnWindowsPhone程序集:

当页面加载时,控件会旋转到正确的标题,但它不会随着标题的更改而保持旋转。这是我的密码:

Xaml:


政务司司长:

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;
}