Freigeben über


Gewusst wie: Abrufen des Offsets eines visuellen Objekts

Aktualisiert: November 2007

Diese Beispiele zeigen, wie Sie den Offsetwert eines visuellen Objekts abrufen, das relativ zu seinem übergeordneten Element oder einem beliebigen Vorgänger oder Nachfolger angeordnet ist.

Beispiel

Das folgende Markupbeispiel zeigt einen TextBlock, für den unter Margin der Wert 4 definiert ist.

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

Das folgende Codebeispiel zeigt, wie Sie die GetOffset-Methode zum Abrufen des Offsets für den TextBlock verwenden. Die Offsetwerte sind im zurückgegebenen Vector-Wert 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);

Für den Offset wird der Margin-Wert berücksichtigt. In diesem Fall hat X den Wert 4 und Y ebenfalls den Wert 4.

Der zurückgegebene Offsetwert verhält sich relativ zum übergeordneten Element von Visual. Wenn Sie einen Offsetwert zurückgeben möchten, der sich nicht relativ zum übergeordneten Element eines Visual-Elements verhält, verwenden Sie die TransformToAncestor-Methode.

Abrufen des Offsetwerts relativ zu einem Vorgänger

Das folgende Markupbeispiel zeigt einen TextBlock, der in zwei StackPanel-Objekten geschachtelt ist.

<Window xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://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 sind die Ergebnisse des Markups dargestellt.

TextBlock in zwei StackPanels geschachtelt

Versatzwerte für Objekte

Das folgende Codebeispiel zeigt, wie Sie die TransformToAncestor-Methode zum Abrufen des Offsetwerts von TextBlock relativ zum enthaltenden Window-Element verwenden. Die Offsetwerte sind im zurückgegebenen GeneralTransform-Wert 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));

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

Der zurückgegebene Offsetwert verhält sich relativ zum Vorgänger von Visual. Wenn Sie einen Offsetwert zurückgeben möchten, der sich relativ zum Nachfolger eines Visual-Elements verhält, verwenden Sie die TransformToDescendant-Methode.

Abrufen des Offsetwerts relativ zu einem Nachfolger

Das folgende Markupbeispiel zeigt einen TextBlock, 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 die TransformToDescendant-Methode zum Abrufen des Offsetwerts von StackPanel relativ zum untergeordneten TextBlock verwenden. Die Offsetwerte sind im zurückgegebenen GeneralTransform-Wert 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));

Beim Offset werden die Margin-Werte für alle Objekte berücksichtigt. In diesem Fall hat X den Wert -4 und Y ebenfalls den Wert -4. Die Offsetwerte sind negative Werte, da das übergeordnete Objekt relativ zu dessen untergeordnetem Objekt negativ versetzt ist.

Siehe auch

Konzepte

Übersicht über das Grafikrendering in Windows Presentation Foundation

Referenz

Visual

VisualTreeHelper