Gör så här: Hämta förskjutningen av ett visuellt objekt

De här exemplen visar hur du hämtar förskjutningsvärdet för ett visuellt objekt som är relativt dess överordnade, eller vilken som helst av dess förfäder eller efterkommande.

Exempel

Följande markeringsexempel visar en TextBlock som definieras med Margin värdet 4.

<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />

Följande kodexempel visar hur du använder metoden GetOffset för att hämta offset för TextBlock. Förskjutningsvärdena är inneslutna i Vector-värdet som returneras.

// Return the offset vector for the TextBlock object.
Vector vector = VisualTreeHelper.GetOffset(myTextBlock);

// Convert the vector to a point value.
Point currentPoint = new Point(vector.X, vector.Y);
' Return the offset vector for the TextBlock object.
Dim vector As Vector = VisualTreeHelper.GetOffset(myTextBlock)

' Convert the vector to a point value.
Dim currentPoint As New Point(vector.X, vector.Y)

Förskjutningen tar hänsyn till värdet för Margin. I det här fallet är X 4 och Y är 4.

Det returnerade förskjutningsvärdet är relativt det överordnade värdet för Visual. Om du vill returnera ett förskjutningsvärde som inte är relativt det överordnade värdet för en Visualanvänder du metoden TransformToAncestor.

Hämta förskjutningen i förhållande till en överordnad

Följande markeringsexempel visar en TextBlock som är kapslad inom två StackPanel objekt.

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
  <StackPanel Margin="16">
    <StackPanel Margin="8">
      <TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
    </StackPanel>
  </StackPanel>
</Window>

Följande illustration visar resultaten av markeringen.

förskjutningsvärden för objekt
TextBlock kapslat i två StackPanels

Följande kodexempel visar hur du använder metoden TransformToAncestor för att hämta förskjutningen av TextBlock i förhållande till den innehållande Window. Förskjutningsvärdena är inneslutna i GeneralTransform-värdet som returneras.

// Return the general transform for the specified visual object.
GeneralTransform generalTransform1 = myTextBlock.TransformToAncestor(this);

// Retrieve the point value relative to the parent.
Point currentPoint = generalTransform1.Transform(new Point(0, 0));
' Return the general transform for the specified visual object.
Dim generalTransform1 As GeneralTransform = myTextBlock.TransformToAncestor(Me)

' Retrieve the point value relative to the parent.
Dim currentPoint As Point = generalTransform1.Transform(New Point(0, 0))

Förskjutningen tar hänsyn till de Margin-värdena för alla objekt inom den innehållande Window. I det här fallet är X 28 (16 + 8 + 4) och Y är 28.

Det returnerade förskjutningsvärdet är relativt det överordnade värdet för Visual. Om du vill returnera ett förskjutningsvärde som är relativt till en efterföljare till en Visual, använder du TransformToDescendant-metoden.

Hämta förskjutningen i förhållande till en underordnad

Följande markeringsexempel visar en TextBlock som finns i ett StackPanel objekt.

<StackPanel Name="myStackPanel" Margin="8">
  <TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>

Följande kodexempel visar hur du använder TransformToDescendant-metoden för att hämta offseten för StackPanel i förhållande till sin underordnade TextBlock. Förskjutningsvärdena är inneslutna i GeneralTransform-värdet som returneras.

// Return the general transform for the specified visual object.
GeneralTransform generalTransform1 = myStackPanel.TransformToDescendant(myTextBlock);

// Retrieve the point value relative to the child.
Point currentPoint = generalTransform1.Transform(new Point(0, 0));
' Return the general transform for the specified visual object.
Dim generalTransform1 As GeneralTransform = myStackPanel.TransformToDescendant(myTextBlock)

' Retrieve the point value relative to the child.
Dim currentPoint As Point = generalTransform1.Transform(New Point(0, 0))

Förskjutningen tar hänsyn till de Margin-värdena för alla objekt. I det här fallet är X -4 och Y är -4. Förskjutningsvärdena är negativa, eftersom det överordnade objektet är negativt förskjutet i relation till sitt underordnade objekt.

Se även