Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 ist X 4, und Y ist 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.
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 umgebenden Window. In diesem Fall beträgt X 28 (16 + 8 + 4), und Y ist 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 ist X -4, und Y ist -4. Die Offsetwerte sind negativ, da das übergeordnete Element relativ zu seinem untergeordneten Element negativ versetzt ist.
Siehe auch
.NET Desktop feedback