0

我目前正在将一个项目从 Windows Phone 8.1 迁移到 UWP,并且我遇到了 XAML 行的问题,该行在代码中的 renderTransform compositeTransform 旋转时不旋转,但在 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

这条线是在 Map Control 内绘制的。然后更改代码(但即使我将旋转值更改为 0,它也不会旋转。

这是应该旋转上面的 XAML 行的 C# 代码:

lineMilestoneHelperAzimuth.Rotation = azimuth;

如您所见,我也尝试过使用 RotateTransform,但没有成功。

知道为什么会这样吗?

谢谢

4

2 回答 2

0

如果您想在地图上以随地图移动的地理坐标绘制一条线,建议使用 MapPolyine 而不是 XAML https://docs.microsoft.com/en-us/uwp/api/Windows.UI。 Xaml.Controls.Maps.MapPolyline

它将表现更好并更好地坚持地图(XAML 倾向于相对于地图漂移)。

于 2018-03-16T23:42:51.180 回答
0

根据https://docs.microsoft.com/en-us/windows/uwp/maps-and-location/display-poi#add-a-line您可以从代码向地图添加行。我认为这是因为这样您可以通过元素在地图上的位置(可能在地理坐标中)来指定元素的位置,以便在平移和缩放地图时它们随地图一起移动。

另一种方法,如果您正在寻找一种覆盖类型的设置(如平视显示器):将地图嵌套在网格中,并将线作为网格中地图的兄弟:

我做了一个最小的工作示例。请注意更改的线坐标并将 Visibility 设置为 Visible 而不是 Collapsed 以使线进入视图并使其可见。我还使用了硬编码画笔和线条粗细。

<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;
    }
}
于 2018-03-15T17:19:35.590 回答