0

我在 XAML 中有 2 个网格。一大一小。我怎么能检测到,在第一步之后,第二步?我需要类似坐标的东西(需要将第一个网格与第二个网格的边界或此“大网格”中的其他网格对齐)。什么是方法,属性?

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Grid HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="Parent" Margin="124,340,1042,228">
        <Grid.RowDefinitions>
            <RowDefinition Height="100"/>
            <RowDefinition Height="100"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
        </Grid.ColumnDefinitions>
        <Grid Grid.Column="0" ManipulationDelta="Object_ManipulationDelta" x:Name="Figure" ManipulationMode="All">
            <Rectangle Fill="Red" Width="40" Height="40"/>
            <Rectangle Fill="Red" Width="40" Height="40" Margin="-10,30,70,30"/>
            <Rectangle Fill="Red" Width="40" Height="40" Margin="-10,70,70,-10"/>
            <Rectangle Fill="Red" Width="40" Height="40" Margin="-50,70,110,-10"/>
            <Grid.RenderTransform>
                <CompositeTransform/>
            </Grid.RenderTransform>
        </Grid>
    </Grid>
    <Grid x:Name="Field" Width="500" Height="700">
        <Rectangle Fill="Black" Width="40" Height="40" Margin="10,10,450,650" StrokeThickness="1" Stroke="#FF1B1B1B"/>
        <Rectangle Fill="Black" Width="40" Height="40" Margin="50,10,410,650" StrokeThickness="1" Stroke="#FF1B1B1B"/>
        <Rectangle Fill="Black" Width="40" Height="40" Margin="90,10,370,650" StrokeThickness="1" Stroke="#FF1B1B1B"/>
        <!--many rectangles-->
    </Grid>
</Grid>

我将网格图移动到网格字段。将来我可能会将矩形更改为边框。

4

1 回答 1

1

要检测 Figure 和 Field 之间的相对位置,您可以使用类似的方法:

var transform= Field.TransformToVisual(Figure);
Point relativePosition = transform.TransformPoint(new Point(0,0));

relativeCoordinate 将是 Field 的左上角和 Figure 的左上角之间的距离

如果你想要 Grid 的绝对坐标,你可以这样做:

 var transform= this.TransformToVisual(Figure);
 Point absolutePositionFigureGrid = transform.TransformPoint(new Point(0,0));
于 2013-10-10T21:57:32.187 回答