我目前正在将一个项目从 Windows Phone 8.1 迁移到 UWP,并且我遇到了 XAML 行的问题,该行在代码中呈现转换复合转换旋转时不会旋转,但如果在 XAML 中进行更改时会发生。在Windows Phone 8.1中,它没有任何问题。
下面是 XAML 部分:
<Maps:MapControl
<Line x:Name="mapLineMilestoneHelper"
Stroke="Black" StrokeThickness="2" Opacity="1.0" StrokeDashArray="2,2"
RenderTransformOrigin="0.5, 0.5"
X1="0" Y1="-1000" X2="0" Y2="1000" Visibility="Collapsed">
<Line.RenderTransform>
<CompositeTransform x:Name="lineMilestoneHelperAzimuth" Rotation="90.0"/>
<!--<RotateTransform x:Name="lineMilestoneHelperAzimuth"
CenterX="0.5" CenterY="0.5" Angle="0"/>-->
</Line.RenderTransform>
</Line>
</Maps:MapControl
这条线是在地图控件内绘制的。然后在代码中更改(但我将旋转值更改为 0,它不会旋转。
下面是应旋转上面的 XAML 行的 C# 代码:
lineMilestoneHelperAzimuth.Rotation = azimuth;
如您所见,我也尝试过使用RotateTransform,但它不起作用。
知道为什么会这样吗?
谢谢
根据 https://learn.microsoft.com/en-us/windows/uwp/maps-and-location/display-poi#add-a-line,您可以从代码向地图添加行。我认为这是因为这样您就可以通过元素在地图上的位置(可能在地理坐标中(指定元素的位置,以便在平移和缩放地图时它们随地图移动。
如果您正在寻找叠加类型的设置(如平视显示器(,另一种方法是:将地图嵌套在网格中,并将线作为网格中地图的同级:
我做了一个最小的工作示例。请注意更改的线坐标,并将可见性设置为可见而不是折叠,以使线进入视图并使其可见。我还使用了硬编码的画笔和线条粗细。
<Page xmlns:my="using:Windows.UI.Xaml.Controls.Maps"
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<my:MapControl/>
<Line x:Name="mapLineMilestoneHelper"
Stroke="Aqua"
StrokeThickness="5"
Opacity="1.0"
StrokeDashArray="2,2"
RenderTransformOrigin="0.5, 0.5"
X1="0"
Y1="0"
X2="700"
Y2="500"
Visibility="Visible">
<Line.RenderTransform>
<CompositeTransform x:Name="lineMilestoneHelperAzimuth"
Rotation="90.0" />
<!--<RotateTransform x:Name="lineMilestoneHelperAzimuth" CenterX="0.5" CenterY="0.5" Angle="0" />-->
</Line.RenderTransform>
</Line>
<Button Content="Button"
HorizontalAlignment="Left"
Margin="64,80,0,0"
VerticalAlignment="Top"
Click="Button_Click" />
</Grid>
</Page>
在代码隐藏中:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
lineMilestoneHelperAzimuth.Rotation = 45;
}
}
在地图上绘制随地图移动的地理坐标中的线,建议使用 MapPolyine 而不是 XAMLhttps://learn.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Controls.Maps.MapPolyline
它将表现得更好,并坚持地图投注者(XAML 倾向于相对于地图漂移(。