我的应用程序遵循标准的Bing地图示例,我实际上是将对象放置在画布中定义的x,y位置并渲染它们。我没有在我的画布上充当背景的Bing地图,而是实际上有一堆线/路径指令来绘制底层内容,并且需要放置的对象在用户平移/缩放时“粘贴”到这个底层内容。我正在使用mvvm框架(特别是MVVM光),并希望最终的解决方案是mvvm友好的,但是现在需要解决我的对象在用户平移/翻译时不坚持底层“地图”的问题。 p>
我的主要观点如下:
<Canvas Margin="10" Background="AliceBlue" IsManipulationEnabled="True" ManipulationStarting="manipulatingStarting" ManipulationDelta="manipulationDelta">
<view:MapView x:Name="viewContent">
<view:MapView.RenderTransform>
<MatrixTransform/>
</vw:MapView.RenderTransform>
</view:MapView>
<ItemsControl ItemsSource="{Binding Locations}"/>
</Canvas>
我已经为各种类型的LocationViewModel(RestaurantViewModel,ParkingGarageViewModel等)定义了各种数据模板,以便使用他们的视图在所需的x,y位置适当地渲染每个位置。
现在,我主视图中的代码如下所示:
private void manipulatingStarting(object sender, System.Windows.Input.ManipulationStartingEventArgs e)
{
// just let the user pan/translate for now
e.Mode = System.Windows.Input.ManipulationModes.Translate;
}
private void manipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
MatrixTransform transform = viewContent.RenderTransform as MatrixTransform;
if (transform != null)
{
Matrix matrix = transform.Matrix;
matrix.Translate(e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y);
transform.Matrix = matrix;
e.Handled = true;
}
}
这允许用户平移/翻译MapView内容,但绑定到画布的ItemsControl中的对象不会随用户的手势移动。我是否需要以某种方式挂钩操作事件以更新ItemsControl中每个项的相对(x,y)?
答案 0 :(得分:0)
尝试类似:
<map:Map CredentialsProvider="xyz"
NavigationVisibility="Collapsed">
<map:MapLayer>
<map:MapItemsControl ItemTemplate="{StaticResource MyTemplate1}"
ItemsSource="{Binding Shops}" />
</map:MapLayer>
<map:MapLayer>
<map:MapItemsControl ItemTemplate="{StaticResource MyTemplate2}"
ItemsSource="{Binding Theaters}" />
</map:MapLayer>
一个模板:
<DataTemplate x:Key="MyTemplate1">
<Grid map:MapLayer.Position="{Binding Location}"
map:MapLayer.PositionOrigin="Center"
RenderTransformOrigin="0.5,0.5">
<rb:BindingHelper.Binding>
<rb:RelativeSourceBinding Path="ZoomLevel"
TargetProperty="RenderTransform"
RelativeMode="FindAncestor"
AncestorType="Microsoft.Maps.MapControl.Map"
Converter="{StaticResource PushpinScaleTransform}" />
</rb:BindingHelper.Binding>
<Image Source="MyImage.png" />
然后在我的模板中,我使用RelativeSource绑定绑定到地图ZoomLevel和转换器来计算缩放。找到了缩放转换器here,但最终使用here中的缩放逻辑。