Freigeben über


Gewusst wie: Abrufen des Offsets eines visuellen Objekts

Diese Beispiele zeigen, wie Sie den Offsetwert eines visuellen Objekts relativ zu seinem übergeordneten Objekt bzw. zu einem Vorgänger- oder Nachfolgerelement abrufen können.

Beispiel

Das folgende Markupbeispiel zeigt einen TextBlock, der mit dem Margin-Wert 4 definiert ist.

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

Das folgende Codebeispiel zeigt, wie Sie mit der GetOffset-Methode den Offset von TextBlock abrufen können. Die Offsetwerte sind innerhalb des zurückgegebenen Vector-Werts enthalten.

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

Der Offset berücksichtigt den Margin-Wert. In diesem Fall sind X und Y 4.

Der zurückgegebene Offsetwert ist relativ zum übergeordneten Element von Visual. Wenn Sie einen Offsetwert zurückgeben möchten, der nicht relativ zum übergeordneten Element von Visual ist, verwenden Sie die TransformToAncestor-Methode.

Abrufen des Offsets relativ zu einem Vorgängerelement

Im folgenden Markupbeispiel wird ein TextBlock gezeigt, der in zwei StackPanel-Objekten geschachtelt ist.

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

In der folgenden Abbildung werden die Ergebnisse des Markups dargestellt.

Offset values of objects
In zwei StackPanels geschachtelter TextBlock

Das folgende Codebeispiel zeigt, wie Sie mit der TransformToAncestor-Methode den Offset von TextBlock relativ zum enthaltenden Window abrufen können. Die Offsetwerte sind innerhalb des zurückgegebenen GeneralTransform-Werts enthalten.

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

Der Offset berücksichtigt die Margin-Werte für alle Objekte innerhalb des enthaltenden Window. In diesem Fall sind X (16+8+4) und Y 28.

Der zurückgegebene Offsetwert ist relativ zum Vorgängerelement von Visual. Wenn Sie einen Offsetwert zurückgeben möchten, der relativ zum Nachfolgerelement von Visual ist, verwenden Sie die TransformToDescendant-Methode.

Abrufen des Offsets relativ zu einem Nachfolgerelement

Im folgenden Markupbeispiel wird ein TextBlock gezeigt, der in einem StackPanel-Objekt enthalten ist.

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

Das folgende Codebeispiel zeigt, wie Sie mit der TransformToDescendant-Methode den Offset von StackPanel relativ zu dessen untergeordnetem Element TextBlock abrufen können. Die Offsetwerte sind innerhalb des zurückgegebenen GeneralTransform-Werts enthalten.

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

Der Offset berücksichtigt die Margin-Werte für alle Objekte. In diesem Fall sind X und Y -4. Die Offsetwerte sind negativ, da das übergeordnete Element relativ zu seinem untergeordneten Element negativ versetzt ist.

Weitere Informationen