在XAML中检测网格上的网格

时间:2013-10-10 20:52:40

标签: xaml windows-8

我在XAML中有2个网格。一个小而一个大。我是如何在第一次移动后立即检测到它的?我需要像坐标一样的smth(需要将第一个网格对齐到第二个网格的边界或者对齐这个'大网格'中的其他网格)。什么是方法,属性?

<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>

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

1 个答案:

答案 0 :(得分:1)

要检测图和字段之间的相对位置,可以使用类似的东西:

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

relativeCoordinate将是场的左上角和图的左上角之间的距离

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

 var transform= this.TransformToVisual(Figure);
 Point absolutePositionFigureGrid = transform.TransformPoint(new Point(0,0));