C# 如何旋转放置在Mapcontrol上的图像 问题
我有一个在地图上跟踪车辆的应用程序。然而,我不能让这些小家伙朝着他们的运动方向旋转。基本上,他们都是横着走!啊 代码C# 如何旋转放置在Mapcontrol上的图像 问题,c#,uwp,win-universal-app,uwp-xaml,uwp-maps,C#,Uwp,Win Universal App,Uwp Xaml,Uwp Maps,我有一个在地图上跟踪车辆的应用程序。然而,我不能让这些小家伙朝着他们的运动方向旋转。基本上,他们都是横着走!啊 代码 放在地图上的图像似乎完全忽略了我试图应用的任何角度 为了理解为什么旋转没有生效,让我们先看看下面的图片,它取自VisualStudio中的Live Visual树- 我使用一个矩形,但是在你的例子中,你会看到你的图像控件。将其插入MapControl.Children集合时,它将被一个名为MapOverlyPresenter的特殊元素包装,如图所示 这个MapOverlyPres
放在地图上的图像似乎完全忽略了我试图应用的任何角度 为了理解为什么旋转没有生效,让我们先看看下面的图片,它取自VisualStudio中的Live Visual树- 我使用一个矩形,但是在你的例子中,你会看到你的图像控件。将其插入MapControl.Children集合时,它将被一个名为MapOverlyPresenter的特殊元素包装,如图所示 这个MapOverlyPresenter是MapControl中的一个内部元素,令人惊讶的是,互联网上没有关于它具体做什么的官方文档。我的猜测是,当您缩放或旋转贴图时,该覆盖只是通过向相反方向缩放或旋转来响应,以保持子元素的原始大小和旋转,这导致内部图像的旋转变换以某种方式丢失 附言和成分在这里也没有影响 解决方案 解决这一问题的方法很简单——与其直接在图像上公开旋转变换,不如创建一个名为ImageControl的用户控件,该控件封装此图像及其变换,具有UriPath和Angle等依赖属性,这些属性负责将信息向下传递到内部图像及其CompositeTransform属性 imagecontrolxaml 如何使用此ImageControl 结果
希望这有帮助 为了理解为什么旋转没有生效,让我们先看看下面的图片,它取自VisualStudio中的Live Visual树- 我使用一个矩形,但是在你的例子中,你会看到你的图像控件。将其插入MapControl.Children集合时,它将被一个名为MapOverlyPresenter的特殊元素包装,如图所示 这个MapOverlyPresenter是MapControl中的一个内部元素,令人惊讶的是,互联网上没有关于它具体做什么的官方文档。我的猜测是,当您缩放或旋转贴图时,该覆盖只是通过向相反方向缩放或旋转来响应,以保持子元素的原始大小和旋转,这导致内部图像的旋转变换以某种方式丢失 附言和成分在这里也没有影响 解决方案 解决这一问题的方法很简单——与其直接在图像上公开旋转变换,不如创建一个名为ImageControl的用户控件,该控件封装此图像及其变换,具有UriPath和Angle等依赖属性,这些属性负责将信息向下传递到内部图像及其CompositeTransform属性 imagecontrolxaml 如何使用此ImageControl 结果
希望这有帮助 真棒,详细的回答!谢谢你的帮助!为什么显示错误-在类型ImageControl中未找到ConvertToBitmapImage?@user2431727您需要以14393或更高版本为目标才能使用函数x:Bind.my的目标是10240。我可以直接从车辆图像传递位图图像吗?而不是uriPath?@user2431727你只需要写一个普通的值转换器就可以了。太棒了,详细的答案!谢谢你的帮助!为什么显示错误-在类型ImageControl中未找到ConvertToBitmapImage?@user2431727您需要以14393或更高版本为目标才能使用函数x:Bind.my的目标是10240。我可以直接从车辆图像传递位图图像吗?您只需要编写一个普通的值转换器,而不是uriPath?@user2431727。
Image vehicleImage = new Image
{
//Set image size and source
};
RenderTransform rotation= new RotateTransform{Angle = X};
vehicleImage.RenderTransfrom = rotation;
_mainMap.Children.Add(vehicleImage);
MapControl.SetLocation(vehicleImage, _position);
<UserControl x:Class="App1.ImageControl" ...>
<Image RenderTransformOrigin="0.5,0.5"
Source="{x:Bind ConvertToBitmapImage(UriPath), Mode=OneWay}"
Stretch="UniformToFill">
<Image.RenderTransform>
<CompositeTransform Rotation="{x:Bind Angle, Mode=OneWay}" />
</Image.RenderTransform>
</Image>
</UserControl>
public string UriPath
{
get => (string)GetValue(UriPathProperty);
set => SetValue(UriPathProperty, value);
}
public static readonly DependencyProperty UriPathProperty = DependencyProperty.Register(
"UriPath", typeof(string), typeof(ImageControl), new PropertyMetadata(default(string)));
public double Angle
{
get => (double)GetValue(AngleProperty);
set => SetValue(AngleProperty, value);
}
public static readonly DependencyProperty AngleProperty = DependencyProperty.Register(
"Angle", typeof(double), typeof(ImageControl), new PropertyMetadata(default(double)));
public BitmapImage ConvertToBitmapImage(string path) => new BitmapImage(new Uri(BaseUri, path));
var vehicleImage = new ImageControl
{
Width = 80,
UriPath = "/Assets/car.png",
Angle = 45
};
_mainMap.Children.Add(vehicleImage);